Hallo !!
Richtich 2 Pointer. Die DLL umfasst alle Funktionen zur Kamerasteuerung, die ich brauche. Aber alle anderen Funktionen funzen erst, wenn der Handler einwandfrei ist. Diese SetupCam hat der Mann der Firma extra dafür geschrieben, dass ich die Riesenhandler für die Kamerasteuerung eben nicht selber in LV rekonstruieren muss. Müsste ich eigentlich um die anderen Funktionen überhaupt nutzen zu können.
Ich hab da noch ne Messkarte die ohne Probleme funktioniert. Ist ähnlich aufgebaut: importierte DLL-Funktionen. Hier ist es so, dass zB DIO_Config auch einen Handler instanziert aber nur das int "taskid" zurückgibt. Das ist, wenn ich das richtig verstehe, ein Pointer (also inhalt = speicheradresse) auf den Messkarten-Handler.
Hier steht aber, genau wie du auch grad grübelst, wirklich nur ein uint32 T *taskid, und eben nicht *structure (welcher Art auch immer) und das ganze als "Zeiger auf Wert". Genau prüfen kann ich das leider nicht, da ich hier nur die DLL hab und weder Header noch Quellcode.
Der Herr von Smartray meint nun Camdesc* cd1 gibt mir die Adresse raus.
Wenn ich das aber mit uint und zeiger auf Wert versuche geht gar nix.
Rolfk meint ja, dass cd1 und pars1 zwar Pointer auf eine Struktur sind aber eben nicht Pointer die aus der DLL herauskommen. Und in C kann man nur Werte in einem Parameter zurückgeben indem man diesen Parameter als Referenz verwendet.
Der Herr von Smartray hat entgegengesetzt gemeint, das wäre nicht so. Woher die Unstimmigkeit? Was gibt mir der Funktionsaufruf denn nun? Muss der so umgeschrieben werden, dass wirklich ein int bzw int* rauskommt? Kann ich die Kamerafunktionen dann denn noch ungeändert nutzen? die Erwarten ja *Camdesk und kein Int. Oder hat nur LabVIEW das Problem sowas wie Adressoperatoren usw eigentlich nicht zu kennen? Mit anderen Worten, angenommen ich krieg meinen uint32bitzeigerinhaltadresse aus der Setup, versteht der nächste Funktionsaufruf dessen Inhalt dann richtig ? Nämlich als Adresse der Instanz und eben nicht als einfachen Int und infolge als falschen Variablentyp.
Wenn das alles nicht gehen sollte.... Der Mann schreibt grad an der Api so rum, dass ich die Kamerafunktionen ganz ohne Handler nutzen kann. Der wird dann per ApiStart instanziert und verkapselt und im übrigen als globale Variable übergeben. Ich krieg dann einfach ne Schnittstelle zum Ändern oder Lesen von Inhalten des Handlers.
MFG Torsten
' schrieb:Wenn ich das richtig interpretiere, bekommst du von der Funktion also lediglich zwei Pointer zurück. Man hätte - da es dich nicht interessiert, wie die jeweiligen Cluster ausfgebaut sind - den Prototypen auch machen können als "Int SR_API_SetupCam (int* MyIntVar1, int* MyIntVar2)". Wobei INT hier missbraucht wird als Zwischenspeicher für einen Pointer. Der Wert von MyIntVar2 interessiert dich überhaupt nicht. Lediglich MyIntVar1 musst du an die anderen Funktionen übergeben.
[*grübel*]
Für was brauchst du denn dann die DLL, wenn du nie Daten heraus liest ? Hat die ein eigenes "Frontpanel"?
[/*grübel*]
Sehe ich das richtig?
Wenn dem so ist, müsstest du lediglich im DLL-Knoten angeben: Typ UI32, Zeiger auf Wert. Für Int SR_API_SetupCam zweimal, für alle anderen einmal.