Pointer by reference geht nur in Debug
-
Hallo,
in meinem aktuellen Projekt behandle ich zwei unterschiedliche Programme. Das eine Programm ist mit LabWindows (ANSI-C) umgesetzt und ruft C++/CLI Methoden des zweiten Projektes auf. Eine Funktion aus LabWindows übergibt dem CLI Programm zwei Argumente by reference. In der Methode werden dann verschiedene Sachen gemacht (Berechnungen etc.) und am Ende das Ergebnis dem Argument zugewiesen.
Damit sollte in der LabWindows-Funktion (nach dem Aufruf der C++/CLI Methode) das Ergebnis zur Verfügung stehen. Wenn ich mein C++/CLI-Projekt im Debug-Modus compiliere, dann wird das Ergebnis ohne Probleme an die aufrufende native Funktion zurückgegeben. Sobald ich das Projekt jedoch in Release-Modus compiliere, bekomme ich keinen Wert mehr von der Funktion zurückgegeben.Eine Beobachtung die ich dabei gemacht habe ist folgende:
Wenn ich das Programm mit Visual Studio debugge, so wird der aufrufenden nativen Funktion die richtigen Werte übergeben. Debugge ich das Projekt aus LabWindows heraus, so wird der nativen Funktion falsche Werte übergeben. Auch das Starten des Projektes ohne IDE führt dazu, dass falsche Werte zurückgegeben werden. Nur mit Visual Studio habe ich die korrekten Werte!! Könnt ihr die Fehlerursache eingrenzen? Was muss ich tun?native Funktion aus LabWindows:
int __stdcall __export CAM_GetLEDColor(REL_INTERFACE_DEVICE_SLOT_NODE *ptr_Rel_IDS_Node, int iBlockNo, int *iIntensity, int *iDetectedColorNo) { ... ierror = LED_DETECTION_GetLEDColor(ptr_Rel_IDS_Node, iBlockNo, iIntensity, iDetectedColorNo); //Aufruf der C++/CLI-Funktion ... }
C++/CLI- Methode:
DLLEXPORT_IMPORT int __stdcall LED_DETECTION_GetLEDColor(REL_INTERFACE_DEVICE_SLOT_NODE *ptr_Rel_IDS_Node, int iBlockNo, int *iIntensity, int *iDetectedColorNo) { //Reset der Variablen *iIntensity = 0; *iDetectedColorNo = LED_UNDEFINED_COL; //Führe Berechnungen durch ... //Werte sollten hier an die aufrufende native Funktion zurückgegeben werden!! *iIntensity = iIntensity_Block[iBlockNo-1]; *iDetectedColorNo = detected_color_array[iBlockNo-1]; ... }
Kann mir einer weiterhelfen?
Vielen Dank für eure Hilfe!