(06.09.2012 09:47 )balze schrieb: Hallo zusammen,
ich habe die Aufgabe eine Software (in Delphi 7) in LabVIEW nachzuprogrammieren.
Diese Software beeinhaltet eine ziemlich aufwendige Maske zur Parametrierung des Versuches.
Diese Maske wurde in C++ geschrieben und ist in einer DLL aufrufbar.
Funktionsprototyp:
int CreateSpec(HINSTANCE hinst, HWND hwnd, ProfileData *g_SpecData, SpecDesign *g_SpecDesign);
Die Strukturen ProfileData und SpecDesign sind fuer mein jetziges Problem noch ohne Belang und duerfen auf NULL zeigen.
Das ganze funktioniert in der Delphi-Software problemlos. Bei Aufruf der DLL wird die C++ GUI ueber das Delphi GUI gelegt.
Ich habe Probleme dies mit LabVIEW nachzubilden. Die DLL antwortet mir immer mit dem Fehlercode fuer eine ungueltige HINSTANCE (Rueckgabewert = 1).
Ist es ueberhaupt moeglich von LabVIEW aus DLLs mit GUI zu starten? Ich habe hierzu keine Informationen finden koennen (wuesste aber auch nicht, warum das nicht gehen sollte ....).
Ich waere fuer jeden Tipp dankbar!
Meine Entwicklungsumgebung: LabVIEW 2011 auf Windows 7/64
Schoenen Gruss
Balze
Im Prinzip ist es zwar möglich, in der Praxis aber manchmal mit ziemlichen Problemen gepflastert. LabVIEW macht auf Windowsebene ziemlich heftige Klimmzüge um das zu tun was es eben tun soll. Mit Delphi kenne ich mich nicht so aus, aber ich kann mir gut vorstellen, dass die auf window management Ebene auch so einiges auf ihre eigene Weise tun. Das kann sich schon mal sehr unhübsch beissen mit der Weise wie LabVIEW sein internes window management abhandelt.
Grundsätzlich kannst Du aber mal versuchen um die Windows API Methode GetModuleHandle() aufzurufen und das damit erhaltene Handle als HINSTANCE zu übergeben. Möglicherweise funktioniert auch einfach NULL, da viele Funktionen das interpretieren um in diesem Fall selber GetModuleHandle() aufzurufen. Als nächstes kommt dann natürlich HWND welches wohl als Parent des dargestellten Dialogs fungiert. Auch hier ist NULL oft zulässig da dies dann als Desktop angesehen wird, der Dialog ist also Desktop modal, nicht unbedingt immer sehr praktisch aber zu Testzwecken auch wieder nicht so katastrophal. Später kannst Du immer noch mittels FindWindow() das Handle zu Deinem Hauptfenster abfragen und dieses als Parameter übergeben.