funktionspointer



  • ghostwhisperer schrieb:

    Hallo. Doch lib ist vorhanden.

    Wenn du eine LIB hast, einfach die oben beschriebene Anweisung:

    #pragma comment(lib,"DLLName.LIB")
    

    oder den Namen der LIB der Liste aller in das Projekt einzubindenen Bibliotheken in den Einstellungen deines Linkers hinzufügen.

    ghostwhisperer schrieb:

    DAS hier ist aus der dokumentation des Fremdprogramms:

    Prototyp:
    int SR_API_Init (int (*StatusMessage) (STATUS_MSG_ARGLST));
    Argumente:
    StatusMessage Funktionspointer auf einen StatusMessage Callback
    vom Typ:
    StatusMessage (STATUS_MSG_ARGLST);

    Mehr steht nicht drin und nen Funk-Pointer hab ich vorher nie gebraucht. Und nu hab ich keinen Raff wie ich den Zeiger anlegen muss.

    SR_API_Init ist eine Funktion (wahrscheinlich aus der DLL, so wie ich das verstanden habe). Sie übernimmt als Parameter einen Zeiger auf eine Funktion, die ein STATUS_MSG_ARGLST -Objekt als Parameter übernimmt und einen int -Wert zurückgibt.

    Das ist jetzt komisch, denn wenn eine LIB vorhanden ist und du diese einbindest, müsste dort stehen:

    __declspec(dllimport) int SR_API_Init(int(*StatusMessage)(STATUS_MSG_ARGLST));
    

    Könnte es sein, dass die Definition (also französiche Klammern nach dem Funktionskopf) bereits vorhanden ist, oder endet die Deklaration auf ein ';'?

    Wie dem auch sei, der Zeiger auf Funktionen wie SR_API_Init-Funktionen ist:

    typedef int (__cdecl*ThePointer)(int(__cdecl*)(STATUS_MSG_ARGLST));
    

    Aber wenn du mit GetProcAddress die Adresse rausfindest und durch eine Umwandlung in ThePointer in einem solchen Zeiger speicherst, darfst du nicht vergessen, dass du eine Funktionsadresse als Parameter angeben musst. Und die Funktion muss den angegebenen Kriterien entsprechen.



  • Hi !! Was ist jetzt falsch ? Oder liegts nicht an mir sondern an der dll???

    #include "StdAfx.h"
    #include "Resource.h"
    #include "PI_Types.h"
    #include "PI_ModifyColorImage.h"
    #include "F:\testprogramme\cpp\installation_ausrufeZ\SmartRay\api\SR_API.h"
    #pragma comment(lib,"F:\testprogramme\cpp\installation_ausrufeZ\SmartRay\api\SR_API.lib")
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
    
    /////////////////////////////////////////////////////////////////////////
    // Parameter structures
    /////////////////////////////////////////////////////////////////////////
    // structure for parameter block
    
     CAMDESC* Cam1; CAMDESC* Cam2;
     char* apiver ="empty";
     int Api_message ;
     typedef int (__cdecl*StatusMessage)(int(__cdecl*)(STATUS_MSG_ARGLST)); 
    
    static BOOL Init_Api(int &message)
    {
    	__declspec(dllimport) int SR_API_Init(StatusMessage); 
    	//message = SR_API_Init(StatusMessage Cam1,mesgType,mesgdata1,mesgdata2,mesg);
    	return true;
    }
    

    ERROR-Codes:

    1>f:\testprogramme\cpp\pi_testsmartrayinclude\pi_modifycolorimage.cpp(19) : warning C4129: 'c' : unrecognized character escape sequence
    1>f:\testprogramme\cpp\pi_testsmartrayinclude\pi_modifycolorimage.cpp(19) : warning C4129: 'i' : unrecognized character escape sequence
    1>f:\testprogramme\cpp\pi_testsmartrayinclude\pi_modifycolorimage.cpp(19) : warning C4129: 'S' : unrecognized character escape sequence
    1>f:\testprogramme\cpp\pi_testsmartrayinclude\pi_modifycolorimage.cpp(19) : warning C4129: 'S' : unrecognized character escape sequence
    1>Linking...
    1>LINK : fatal error LNK1104: cannot open file 'F: estprogrammecppinstallation_ausrufeZSmartRaypiSR_API.lib'
    1>Build log was saved at "file://f:\testprogramme\cpp\PI_testsmartrayinclude\Debug\BuildLog.htm"
    1>PI_Parameter - 1 error(s), 4 warning(s)
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
    

    WENN ich die Zeile pragma lib weglasse kommt nur 1 Fehler:

    1>PI_ModifyColorImage.obj : error LNK2019: unresolved external symbol _SR_API_GetAPIVersion@0 referenced in function "int __cdecl getVersion_Api(char * &)" (?getVersion_Api@@YAHAAPAD@Z)
    1>.\Debug/PI_Parameter.dll : fatal error LNK1120: 1 unresolved externals
    1>Build log was saved at "file://f:\testprogramme\cpp\PI_testsmartrayinclude\Debug\BuildLog.htm"
    1>PI_Parameter - 2 error(s), 1 warning(s)
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
    


  • Das \ in der Zeichenkette wird als 'spezielles' Zeichen interpretiert. z.B. \n wäre ein Zeilenumbruch \t ein Tab-Zeichen.
    In deinem Fall musst du \\ schreiben also z.b.
    #pragma comment(lib,"F:\\testprogramme\\cpp\\installation_ausrufeZ\\SmartRay\\api\\SR_API.lib").

    Dein geposteter Code sieht abenteuerlich aus.
    Sofern du da eine DLL erzeugen willst, ist das

    static BOOL Init_Api(int &message)
    

    Ist etwas unschön (C-Schnittstelle mit Referenzen).

    Welchen Sinn hat das

    __declspec(dllimport) int SR_API_Init(StatusMessage);
    

    innerhalb der Methode? Ist doch mit Sicherheit Teil des Headers SR_API.h?



  • Bitte immer nur den absolut nötigen Code posten ... 😉

    In der Headerdatei deiner DLL müsste folgendes stehen:

    //Hier noch ohne typedef, dies wird später eingefügt. Oder hat der Programmierer der DLL einen eigenen Funktionszeiger erstellt?
    __declspec(dllimport) int SR_API_Init(int(__cdecl*)(STATUS_MSG_ARGLST));
    

    In der Quellcodedatei muss dann dies hier stehen:

    #include "F:\\testprogramme\\cpp\i\nstallation_ausrufeZ\\SmartRay\\api\\SR_API.h"
    //Sonderzeichen müssen für den Compiler extra markiert werden ...
    #pragma comment(lib,"F:\\testprogramme\\cpp\\installation_ausrufeZ\\SmartRay\\api\\SR_API.lib")
    
    //Funktionszeiger ...
    typedef int (__cdecl*StatusMessage)(int(__cdecl*)(STATUS_MSG_ARGLST)); 
    
    //Was willst du hiermit eigentlich erreichen? Du musst die Funktions nicht initialisieren oder so, du kannst einfach die Funktion aufrufen ... im übrigen, StatusMessage ist ein Typ, kein Objekt. Dir fehlt eine Funktion, dessen Adresse du übergeben kannst, und sie muss ein STATUS_MSG_ARGLST-Objekt als Argument übernehmen ...
    
    int __cdecl Example(STATUS_MSG_ARGLST Param)
    {
        //Macht irgendwas ...
        return 1;
    }
    
    static BOOL Init_Api(int*message)//Zeiger ist besser ...
    {
        *message=SR_API_Init(Example);//So macht man's ...
        return true;
    }
    


  • Hallo ! Ich möchte die Funktionen der Fremd-DLL in mein eigenes Prog einbinden, hab aber keine Ahnung wie ...
    Ich weiss nur was im Pdf von Smartray steht:
    4.2 SR_API_Init
    Die API wird durch diese Init Funktion initialisiert. Die anderen Funktionen können erst nach erfolgter Initialisierung aufgerufen werden. Beim Aufruf wird ein Funktionspointer auf eine allgemeine Messagefunktion übergeben. Diese Funktion wird aufgerufen, wenn Meldungen von der Kamera oder API vorliegen.
    Hinweis: Die Struktur der Messagefunktion wird derzeit überarbeitet und künftig deutlich umfangreicher sein.
    Prototyp: int SR_API_Init (int (*StatusMessage) (STATUS_MSG_ARGLST));
    Argumente: StatusMessage Funktionspointer auf einen StatusMessage Callback
    vom Typ: StatusMessage (STATUS_MSG_ARGLST);

    Im Moment mach ich das hier (hab die apidateien mal ins Stammverzeichnis kopiert):

    #include "StdAfx.h"
    #include "Resource.h"
    #include "PI_Types.h"
    #include "PI_ModifyColorImage.h"
    #include "SR_API.h"
    #pragma comment(lib,"SR_API.lib")
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
    CAMDESC* Cam1; CAMDESC* Cam2;
    int mesgType; int mesgdata1; int mesgdata2; char *mesg;
     char* apiver ="empty";
    int Api_message ;
    typedef int (*StatusMessage)(*STATUS_MSG_ARGLST);
    static BOOL Init_Api(int &message)
    {
    	message = SR_API_Init(StatusMessage); 
    	return true;
    }
    static BOOL getVersion_Api(char* &version)
    {
    	version = SR_API_GetAPIVersion();
    	//version = __declspec(dllimport) SR_API_GetAPIVersion();
    	return true;
    }
    

    Mit den Fehlern:
    1>f:\testprogramme\cpp\pi_testsmartrayinclude\pi_modifycolorimage.cpp(54) : error C2275: 'CAMDESC' : illegal use of this type as an expression
    1> f:\testprogramme\cpp\pi_testsmartrayinclude\sr_api.h(121) : see declaration of 'CAMDESC'
    1>f:\testprogramme\cpp\pi_testsmartrayinclude\pi_modifycolorimage.cpp(54) : error C2065: 'cd' : undeclared identifier
    1>f:\testprogramme\cpp\pi_testsmartrayinclude\pi_modifycolorimage.cpp(54) : error C2062: type 'int' unexpected
    1>f:\testprogramme\cpp\pi_testsmartrayinclude\pi_modifycolorimage.cpp(58) : error C2065: 'StatusMessage' : undeclared identifier

    Die Fehler beziehen sich anscheinend auf das define im Fremdheader:

    // Argumente-Liste des Message Funktion 
    #define STATUS_MSG_ARGLST CAMDESC* cd, int msgType, int msgdata1, int msgdata2, char *msg
    

    Sorry ich hab absolut kein Raff von der Geschichte



  • Hi. Mir ist eben eingefallen, dass die Fremd-dll gar net in der registry steht, da das Programm dazu auf einem anderen Rechner installiert ist. Die muss doch in der Reg stehen oder ? Oder gehts auch ohne, also nur "Datei vorhanden" ?
    Und wenn, kann man nen Schlüssel irgendwie selbst definieren? das Prog lässt sich auf meinem Arbeitsrechner leider nicht installieren, weil der neue Microsoft-Installer-Dienst da immer meckert.

    Habs gefunden... Hauptsache dll hat auch ne Kopie in system oder system32



  • So, meine erste importierte Funktion funktioniert jetzt. Nämlich die einzige die nicht von der Callback-Funktion abhängig ist. Vorher fehlte die Kopie der dll in system32...
    Und das Prog meckert auch nicht mehr über meine Pointer-Definition.
    Stattdessen meckert es über das Original-Define in der Fremd-dll:

    // Argumente-Liste des Message Funktion 
    #define STATUS_MSG_ARGLST CAMDESC* cd, int msgType, int msgdata1, int msgdata2, char *msg
    
    1>f:\testprogramme\cpp\pi_testsmartrayinclude\pi_modifycolorimage.cpp(58) : error C2065: 'cd' : undeclared identifier
    1>f:\testprogramme\cpp\pi_testsmartrayinclude\pi_modifycolorimage.cpp(58) : error C2275: 'CAMDESC' : illegal use of this type as an expression
    1>        f:\testprogramme\cpp\pi_testsmartrayinclude\sr_api.h(121) : see declaration of 'CAMDESC'
    1>f:\testprogramme\cpp\pi_testsmartrayinclude\pi_modifycolorimage.cpp(58) : error C2062: type 'int' unexpected
    

    Die DLL ist aber sehr umfangreich und ausserdem muss ich mich an den Hersteller wenden, wenn DIE ein Fehler gemacht haben, was ich allerdings nicht glaube. Warum meckert mein Program üüber deren Definition???
    Hier nur mal die Definition des Kamera-Parameter-Structs:

    typedef struct{
    	int cam_index;
    	char name[260];
    	char IPAdr[17];		// IP Adr String "192.168......
    	unsigned short portnum;
    	int command;
    	unsigned char header[HEADERSIZE_USER];
    	void* pcamdata;
    	int camdatasize;
    	int dataavailable;
    	int connectionstate;
    	int tcp_handle;
    	int active;
    	int alive_time;
    	int archiv_active;
    	int archiv_handle;
    	void *lut;
    	void *usercbf; //=cbf(CAMDESC* cd)
    	int digio_out[4];
    	int digio_in[4];
    	int laser_status;
    	int laserlight;
    	int fps;
    	float Temp;
    	int running;
    	PARAM cpar;
    } CAMDESC;
    


  • Vielleicht solltest du dich einfach mal ein bisschen mehr mit der Materie beschäftigen, anstatt auf Teufelkommraus Code auszuprobieren? Es wird erwartet, dass man sich in den Code (sowohl von fremder als auch von, gerade von eigener Seite) einarbeitet ...

    1. Funktionszeiger ...

    Eine Funktion ist auch ein Objekt eines Types, der allerdings nicht definiert wurde, oder besser gesagt, den man sich zusammenbasteln kann. Eine Funktion, die void zurückgibt,ein __stdcall er ist und einen int und ein HMODULE übdernimmt, hat den Typ:

    void(__stdcall*)(int,HMODULE)
    

    Um einen solchen Typen zu erstellen, nimmt man immer typedef . Denn #define nimmt lediglich eine Textersetzung vor. Der Unterschied ist offensichtlich:

    typedef void (__stdcall*Example_1)(int,HMODULE);//Ein neuer Typ namens Example_1 wurde erstellt.
    #define Example_2 void(__stdcall*)(int,HMODULE)//Dies ist lediglich eine Textersetzung, eine Umwandlung fragwürdig.
    

    Das heißt also, wenn dein Freund eine DLL mit einem Funktionszeiger, der über eine Textersetzung definiert wird, arbeitet, würde ich ihn anhauen, dies in der nächsten Version zu ersetzen.

    Für dich heißt das gar nichts, denn du brauchst den Zeiger gar nicht, um eine Typumwandlung zu bewerkstelligen. Du hast bereits alles, was du brauchst, siehe unten.

    Im übrigen: mit dem Wissen, dass #define lediglich eine Textersetzung vornimmt, solltest du bemerken, dass STATUS_MSG_ARGLST lediglich die Parameterliste definiert - und eine Parameterliste gibt noch lange nicht den Typ der Funktion an (dazu gehört noch die Art des Calls und der Rückgabetyp).

    Außerdem:

    ghostwhisperer schrieb:

    Prototyp: int SR_API_Init (int (*StatusMessage) (STATUS_MSG_ARGLST));

    ist völliger Quatsch. StatusMessage wurde nie definiert, oder zumindest weiß ich davon nichts. Wenn man eine Defintion erstellt, dann so (entschuldigung übrigens dafür, dass ich dachte, dass STATUS_MSG_ARGLST eine Struktur ist, aber für gewöhnlich kapselt man Daten, die zusammengehören, in eine Struktur und nicht in eine Textersetzung):

    #define STATUS_MSG_ARGLST CAMDESC*,int,int,int,char*
    int SR_API_Init(int(*)(STATUS_MSG_ARGLST));
    

    oder so:

    int SR_API_Init(int(*)(CAMDESC*,int,int,int,char));
    

    oder so (mein Favorit):

    typedef struct _STATUS_MSG_ARGLST
    {
        CAMDESC* cd;
        int msgType;
        int msgdata1;
        int msgdata2;
        char *msg;
    }STATUS_MSG_ARGLST;
    
    int SR_API_Init(int(*)(_STATUS_MSG_ARGLST));
    

    Vom Layout her wurde ich sagen, die DLL ist entweder noch nicht ausgereift, oder es sind Stümper am Werk. Ich vermute (und hoffe für dich) ersteres ...

    2. Registry

    Die Registry ist dazu da, Verküpfungen, interne Abfragen und Werte zu sichern - der ganze interne Scheiß eben. Dort wird z.B. gesichert, wie oft das jeweilige Programm gestartet wurde (wenn der Eintrag nicht in einer .ini steht oder so) oder die Verknüpfung vom Desktopsymbol zur Anwendung. DLLs werden dort als Daten auf der Festplatte angesehen, die einfach nur da sind (zumindest entspricht dies meinem Wissen über die Registry, wenn falsch, dann bitte nicht aufregen 😉 ).

    Tatsächlich kannst du jede DLL verwenden, die du willst - sie muss nur zum OS kompatibel sein. Ob sie in der Registry als DLL steht, ist völlig egal.

    3. Windows

    DLLs werden zuerst im selben Ordner wie die Anwendung, dann im Windows-Ordner gesucht. Ob Kopie oder nicht ist völlig egal, aber ein Exemplar muss vorhanden sein.

    4. Zusammenfassung:

    Na gut, noch einmal, diesmal ganz ausführlich:

    //Da du selbst mit einer LIB (die dafür sorgt, dass du zur Laufzeit die DLL
    //einbinden kannst) und einer DLL (in der die gesamten Funktionen stehen) dem
    //Compiler trotzdem klarmachen musst, dass es sich bei den Bezeichnern um 
    //Funktionen handelt, bindest du die Headerdatei ein, in der alles steht:
    #include "F:\\testprogramme\\cpp\\installation_ausrufeZ\\SmartRay\\api\\SR_API.h"
    //Jetzt kennt der Compiler die Headerdatei. In der Headerdatei befinden sich
    //die Deklarationen der Funktionen, die du benutzen willst - gut und schon. Eine
    //Deklaration ist aber keine Definition (Verknüpfung von einem Bezeichner mit 
    //Code), die steht in der DLL. Da du glücklicherweise eine LIB hast, bindest du 
    //diese einfach ein:
    #pragma comment(lib,"F:\\testprogramme\\cpp\\installation_ausrufeZ\\SmartRay\\api\\SR_API.lib")
    //Gut, jetzt sind auch die Definitionen der DLL drin, sie werden zur Laufzeit 
    //eingebunden.
    
    //Nächster Schritt: Da du keinen Funktionszeiger brauchst, da du keine 
    //Umwandlung brauchst, ist es ganz leicht.
    
    //Da SR_API_Init eine Funktion in der DLL ist, die eine weitere Funktion 
    //übernimmt, musst du erst einmal die Funktion definieren. Deren Definition 
    //kannst du ebenfalls der Dokumentation entnehmen:
    int __cdecl StatusMessage(STATUS_MSG_ARGLST)//Kleiner Fix, bis hierhin dachte ich, dass STATUS_MSG_ARGLST irgendein Typ ist, dabei war es eine Parameterliste.
    {
        //Was möchtest du machen? Ich vermute stark, diese Funktion ist ein Eventhandler, und du kannst so auf Ereignisse reagieren ...
        return 0;
    }
    
    //Gut, die Funktion, die wir übergeben möchten, ist definiert. Nun brauchst du 
    //nur noch die Funktion an SR_API_Init zu übergeben, und schon ist alles gut:
    static BOOL Init_Api(int*message)//Zeiger ... und außerdem, warum static? Hast du vor, die Funktion nur in dieser Datei zu benutzen? Das bewirkt static nämlich.
    {
        //Könnte es sein, dass du abfragen willst, ob der Build erfolgreich war?
        //Wenn ja, dann solltest du dir den Parameter sparen und den Rückgabewert
        //direkt zurückgeben:
        //return SR_API_Init(StatusMessage);
        //Ansonsten ...
        *message=SR_API_Init(StatusMessage);
        return true;
        //Jetzt ist SR_API_Init aufgerufen worden, juhu.
    }
    //Warum diese Funktion? Die DLL ist bereits eingebunden worden, du brauchst keinen Wrapper, da du eine DLL hast.
    static BOOL getVersion_Api(char* &version)
    {
        version = SR_API_GetAPIVersion();//Gefährlich. Handelt es sich hierbei um Speicher auf dem Heap, den du freigeben musst, oder lediglich um einen Verweis auf das interne Objekt?
        //Diese Zeile kannst du dir sparen, das __declspec(dllimport) gehört zur Deklaration, nicht zum Aufruf.
        //version = __declspec(dllimport) SR_API_GetAPIVersion();
        //Und warum 1? Es wird ja nichts überprüft ...
        return true;
    }
    

    Bei den zwei Funktionen wäre es besser, wenn du einfach die Funktionen der DLL aufrufst, anstatt Wrapper-Funktionen zu bilden ...



  • Der aus dem Westen ... schrieb:

    Vielleicht solltest du dich einfach mal ein bisschen mehr mit der Materie beschäftigen, anstatt auf Teufelkommraus Code auszuprobieren? Es wird erwartet, dass man sich in den Code (sowohl von fremder als auch von, gerade von eigener Seite) einarbeitet ...

    Versuch ich ja.. schaff ich nur net alleine

    Der aus dem Westen ... schrieb:

    Im übrigen: mit dem Wissen, dass #define lediglich eine Textersetzung vornimmt, solltest du bemerken, dass STATUS_MSG_ARGLST lediglich die Parameterliste definiert - und eine Parameterliste gibt noch lange nicht den Typ der Funktion an (dazu gehört noch die Art des Calls und der Rückgabetyp).

    Hab ich auch gesehen. Aber weder im header noch in der Doku kann ich was zur eigentlichen Funktion finden.

    Der aus dem Westen ... schrieb:

    Außerdem:

    ghostwhisperer schrieb:

    Prototyp: int SR_API_Init (int (*StatusMessage) (STATUS_MSG_ARGLST));

    ist völliger Quatsch. StatusMessage wurde nie definiert, oder zumindest weiß ich davon nichts. Wenn man eine Defintion erstellt, dann so (entschuldigung übrigens dafür, dass ich dachte, dass STATUS_MSG_ARGLST eine Struktur ist, aber für gewöhnlich kapselt man Daten, die zusammengehören, in eine Struktur und nicht in eine Textersetzung):
    Vom Layout her wurde ich sagen, die DLL ist entweder noch nicht ausgereift, oder es sind Stümper am Werk. Ich vermute (und hoffe für dich) ersteres ...

    mmhh, die Firma ist eigentlich schon länger am Markt..

    Der aus dem Westen ... schrieb:

    Deren Definition kannst du ebenfalls der Dokumentation entnehmen:
    int __cdecl StatusMessage(STATUS_MSG_ARGLST)//Kleiner Fix, bis hierhin dachte ich, dass STATUS_MSG_ARGLST irgendein Typ ist, dabei war es eine Parameterliste.
    {
    //Was möchtest du machen? Ich vermute stark, diese Funktion ist ein Eventhandler, und du kannst so auf Ereignisse reagieren ...
    return 0;
    }

    So funkt soweit, DANKE. Aber das mit der Definition des Callbacks versteh ich nicht. Im pdf der Firma stehteinmal:

    1 Allgemein
    Die SmartRay (SR) API bietet dem Softwareentwickler die Möglichkeit 3D Vision Sensoren
    von SmartRay in seine Projekte einzubinden. Alle Kamerafunktionen sind über das
    Software Interface ansprechbar. Vom Sensor gesendete Daten werden bei Bedarf direkt aufbereitet und [b]an definierbare Callback Funktionen [/b]übergeben.
    

    Ein anderes mal :

    4.2 SR_API_Init
    Die API wird durch diese Init Funktion initialisiert. Die anderen Funktionen können erst
    nach erfolgter Initialisierung aufgerufen werden.
    Beim Aufruf wird ein Funktionspointer auf eine allgemeine Messagefunktion übergeben. Diese Funktion wird aufgerufen, wenn Meldungen von der Kamera oder API vorliegen.[b]Hinweis: Die Struktur der Messagefunktion wird derzeit überarbeitet und künftig deutlich umfangreicher sein.[/b]
    

    Da ich im Header-File auch keinen Hinweis auf die Callback-Funkrtion finden konnte blick ich jetzt gar net durch... Existiert ein fertiger Callback oder nicht? Zum selber definieren, müsste man ja wissen wie genau die Kamera und die DLL funktioniert. Das macht überhaupt keinen Sinn für mich.



  • Sorry nehm meine letzte Aussage zurück.
    Die Callbacks werden schon vom Prog ausgelöst. Wie man darauf reagieren will ist jedoch kundenspezifisch, sprich vom Benutzer definierbar.


Anmelden zum Antworten