' schrieb:Guten Morgen,
vielen dank für die Antwort. Zunächst mal eine Frage und zwar wenn ich den ImagePointer by value übergeben dann sieht mein Funktionsprototyp doch nicht so aus wie du ihn gerade Angegeben hast aus sondern so
MgErr __cdecl DoSomething(unsigned long imagePointer, int32 imageType, int32 rowBytes, int32 x, int32 y, <andere Parameter>);
oder irre ich mich da?
Laut dem beispiel von NI sollte der Prototyp so aussehen wie du ihn beschrieben hast aber wenn ich den ImagePointer als Type Numeric, DataType U32 pass by value deklariere dann sieht das aus wie ich ihn gerade oben beschrieben habe.
Alles andere hört sich logisch an so oder so ähnlich sieht es bei mir auch schon aus.
Das ist halt einfach ein bisschen C Pointer Kenntnis. LabVIEW besitzt keinen Datentyp der spezifisch einen Pointer beschreibt (das ist nicht mehr ganz wahr da der Call Library Node Configuration Dialog in 8.6 einen neuen Pointer Sized signed/unsigend Integer Datentyp kennt, aber auch der wird LabVIEW intern grundsätzlich als signed/unsigned 64Bit Integer behandelt und nur beim Aufruf der Shared Library Funktion korrekt in das für die aktuelle Platform gültige Format (32Bit/64Bit) umgewandelt).
C Pointer auf arbitrary Objekte die in LabVIEW nicht direkt mit LabVIEW eigenen Nodes angesprochen werden müssen, werden daher im Diagramm immer als eine Integerzahl behandelt. Das heisst Dein GetImage Pointer der ja ein uInt32 (unsigned long) ist, ist eigentlich ein void*. Das geht nicht anders wenn man C Pointer im LabVIEW Diagram rumreichen will. Wenn Du diesen Pointer dann wieder an eine C Funktion gibst musst Du halt diese Datenkonversion selber im Kopf machen. In LabVIEW sagst Du der Call Library Node, sieh hier das ist ein uInt32, aber in der DLL Funktion sagst Du dem C Compiler, schau hier kommt ein void* (oder in meinem Beispiel halt ein char* da damit die Offsetberechnung gleich korrekt passiert). In C kann man mit einem void* Pointer keine Pointerarithmetik machen da der C Compiler ja nicht weiss was die Elementgrösse ist worauf der Pointer weist.
Rolf Kalbermatter