INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

C++ DLL mit GUI von LabVIEW starten



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

06.09.2012, 09:47
Beitrag #1

balze Offline
LVF-Neueinsteiger


Beiträge: 4
Registriert seit: Jun 2007

2011
2002
DE

21739
Deutschland
Question C++ DLL mit GUI von LabVIEW starten
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


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
06.09.2012, 10:18
Beitrag #2

rolfk Offline
LVF-Guru
*****


Beiträge: 2.306
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: C++ DLL mit GUI von LabVIEW starten
(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.

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.09.2012, 12:02
Beitrag #3

balze Offline
LVF-Neueinsteiger


Beiträge: 4
Registriert seit: Jun 2007

2011
2002
DE

21739
Deutschland
RE: C++ DLL mit GUI von LabVIEW starten
Hallo Rolf,

vielen Dank fuer Deine schnelle Antwort.

NULL als HINSTANCE zu verwenden habe ich bereits probiert. Leider mit dem gleichen Resultat (Rückgabewert = 1 -> fuer die C++ DLL ungueltige HINSTANCE).

Die WinAPI Funktion GetModuleHandleA liefert mir zwar meine HINSTANCE, aber auch die wird als ungueltig zurueckgewiesen. (Siehe Screenshot im ersten Beitrag) Kann man die gelieferte HINSTANCE irgendwie verifizieren? Ich habe leider nicht wirklich Ahnung von der WinAPI Blush

Ich habe eine Testversion vom Hersteller der DLL bekommen um weiter testen zu koennen. Diese enthaelt zwei Versionen eines einfachen Dialogs.
Die erste Version benoetigt wie gehabt HINSTANCE und HWND, die zweite benoetigt nur HWND.
Version eins verhaelt sich wie gehabt -> ungueltige HINSTANCE
Die zweite Version funktioniert auf Anhieb und legt einen modalen Dialog auf mein VI (und schliesst diesen nicht wieder, so dass ich das VI schliessen muss, um das modale Overlay loszuwerden)

Evtl. wird die DLL entsprechend umgestrickt.

Schoener waere es eine "echte" Loesung finden zu koennen.

Danke und schoenen Gruss,

Balze
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.09.2012, 12:28 (Dieser Beitrag wurde zuletzt bearbeitet: 06.09.2012 12:30 von balze.)
Beitrag #4

balze Offline
LVF-Neueinsteiger


Beiträge: 4
Registriert seit: Jun 2007

2011
2002
DE

21739
Deutschland
RE: C++ DLL mit GUI von LabVIEW starten
HAAAALT!!!

Problem geloest!

Ursache: PEBCAC (Problem Exists Between Chair And Computer) Blink

Mir ist eben ein klitzekleiner Rahmen ueber dem LabVIEW Menue (Ueber dem Datei Menueeintrag) aufgefallen.
Nach naeherer Untersuchung und Ruecksprache mit dem DLL Entwickler stellte sich heraus, dass die Parameter die ich auf NULL gesetzt habe fuer die Darstellung doch eine Rolle spielen.

Unter anderem ist darin der Startpunkt des Fensters und die Groesse (Breite und Hoehe) angegeben.
Per default ist das Fenster bei den Koordinaten 5,5 mit einer Groesse von 10,10 zu sehen. Das ist dann ein klitzekleines Fenster ueber dem Datei Menue Big Grin

Beim zweiten Ausfuehren des VIs ist das Fenster natuerlich schon geoeffnet und die DLL meldet (auch) eine 1 zurueck.

Danke trotzdem fuer die Unterstuetzung.

MfG

Balze
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Windows-Script (*.vbs) Dateien in LabVIEW starten Zet 12 23.082 01.06.2015 16:40
Letzter Beitrag: rolfk
  Fortran-Programm über Labview starten jh1988 10 12.533 22.04.2013 19:28
Letzter Beitrag: rolfk
  Aus LabVIEW heraus externes Programm starten htw10870 7 21.277 19.11.2011 18:40
Letzter Beitrag: rolfk

Gehe zu: