Hallo zusammen,
ich habe Probleme dabei eine C++ DLL in einer Installscript Custom Action aufzurufen. Das Problem entsteht, sobald ich versuche meine DLL mit Parametern aufzurufen. Das Fehlerbild sieht wie folgt aus:
1. Die DLL wird mit Parametern aufgerufen
2. Die Werte, der Parameter, werden in der DLL erfolgreich verarbeitet(Die Werte werden auch erfolgreich übergeben)
3. Nachdem die DLL Methode erfolgreich beendet wurde, wird kein Return Wert übergeben sondern das Setup schlägt mit Error 1603 fehl.
Rufe ich allerdings die gleiche Methode ohne Parameter auf, funktioniert alles ohne Probleme.
Dabei ist es irrelevant welche Parameter, oder wie viele Parameter übergeben werden. Sobald nur ein Parameter übergeben wird, schlägt das Setup fehl.
Mein Code sieht wie folgt aus:
Installscript Aktion:
prototype NUMBER DoSomeThing(HWND, STRING, INT); prototype NUMBER MsiCppTest.DoSomethingInCpp(STRING, INT); prototype NUMBER MsiCppTest.DoSomethingOtherInCpp(); function NUMBER DoSomething(hMSi, sText, nCount) STRING sSupportDir; NUMBER nSize, nResult, nValue; begin nSize = 256; nValue = -1; MsiGetProperty(hMSi, "SUPPORTDIR", sSupportDir, nSize); nResult = UseDLL(sSupportDir ^ "MsiCppTest.dll"); if (nResult = 0) then //funktioniert nicht: nValue = MsiCppTest.DoSomethingInCpp(sText, nCount); //würde funktionieren: nValue = MsiCppTest.DoSomethingOtherInCpp(); UnUseDLL(sSupportDir ^ "MsiCppTest.dll"); endif; return nValue; end;
C++ DLL:
int DoSomethingInCpp(LPCTSTR lpText, int nCount) { //Die machwas Methode wird erfolgreich mit den richtigen Werten ausgeführt machwas(lpText, nCount); //Sobald die Methode abgeschlossen ist, bricht das Setup ab return 123; } int DoSomethingOtherInCpp() { //würde funktionieren machwas(); return 321; }
Benutzt wird IS2016 SP2.
Hat jemand von euch eine Idee, wie man dieses Problem beheben kann?
Viele Grüße