(15.06.2016 07:47 )IchSelbst schrieb: (14.06.2016 11:36 )rolfk schrieb: Der Event Callback Knoten verlangt ein .Net Event.
Also gut: Dann heißt es nicht mehr Callback (im Sinne eines Funktionsaufrufes per spezifischen Delegate), sondern Event - im Sinne von "gemanagert von meinem Eventhandler". Für mich ergibt es dasselbe: Ich muss nicht pollen.
Das ist sogar noch komplizierter als das. Ein Delegate ist ein Objectinterface das als Callback verwendet wird. Ein Funktionspointer, den Du da scheinbar hast, ist einfach ein Funktionspointer. Und dann sind da noch .Net Events! Alles möglich in .Net, wobei Funktionspointer für ein managed System wie .Net schon sehr archaisch sind und Delegates nur in C# wirklich funktionieren. Für Integration mit anderen dann C# Umgebungen sind .Net Events die am besten geeigneten, ausser Du verwendest C(++), dann ist der Funktionspointer das Einfachste.
Zitat:Zitat:Das heisst wenn die Versionen nicht genau stimmen ...
Du meinst die .Net-Versionen: Das hab ich mittlerweile auch herausgefunden. Muss ich also im Auge behalten ...
Nö, ich meinte die Versionen von LabVIEW und der LabVIEW runtime. Wenn Deine DLL in derselben LabVIEW Version erstellt wurde dann die in der Du die DLL lädst, wird die DLL In-Process geladen und aufgerufen. Ansonsten lädt der DLL Wrapper die DLL Out-of-Process in einen LabVIEW Runtime Process und führt ihn mittels Datenmarshalling aus. Das heisst auch dass Du dann auf der Entwickelmaschine die LabVIEW Version in der Du entwickelst haben musst und die LabVIEW Runtime Version in der die DLL erstellt wurde. Und wenn Du dann die Applikation in ein Executable baust musst Du die Runtime Version Deiner Entwickelumgebung haben und die Runtime Version(en) in denen alle eventuellen DLLs erstellt wurden.
Das das Ganze mit den .Net Versionen noch einmal mindestens so kompliziert ist, macht es einfach noch spannender.
Zitat:Fazit:
Dann muss der DLL-Hersteller ein Event verwenden bzw. zur Verfügung stellen. (Ich gehe davon aus, der kann das. Es hat ihm halt noch keiner gesagt, dass er für LV einen Event nehmen muss.)
Nicht nur für LabVIEW! Zwar wird die letzte Version von Visual Basic inzwischen wohl auch irdendetwas haarsträubendes unterstützen um selbst Delegates benützen zu können, aber in der Vergangenheit musstest Du Events benützen oder Dich mit Funktionspointern herumschlagen und damit managed-to-unmanaged und zurück Schwierigkeiten in Kauf nehmen.