Laufzeit-exception beim Aufruf von dll-Funktion mit parameter in Inno Setup
Ich bin erfolgreich aufrufen einer Funktion in einer DLL die von Inno-Setup, aber nach der Rückkehr erhalte ich einen Laufzeit-Fehler...Ausnahme: Zugriffsverletzung bei Adresse XXXXXXX. Schreiben von Adresse XXXXXX.
Die Funktion ist deklariert als:
function CompleteInstall(szIntallPath: String) : Integer;
external 'CompleteInstall@files:InstallHelper.dll stdcall setuponly';
Und rief:
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then begin
CompleteInstall('Parm1'); //ExpandConstant('{app}')
end;
end;
Ist es kein problem, wenn ich die Funktion keine parameter. Es tritt weiterhin auf, wenn ich es ändern um einen einzelnen integer-parameter oder deklarieren es als Funktion und ändern Sie die Funktion ein void-Funktion mit einem integer-parameter.
Die aufgerufene Funktion die nichts tut, sondern zurück:
__declspec(dllexport) int CompleteInstall(char* szInstallPath)
{
//AfxMessageBox ("Got here" /*szInstallPath*/, MB_OK);
return 1;
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einem Konflikt der Aufrufkonventionen. Entweder stellen Sie die Funktion in der DLL verwenden
stdcall
sowie:oder ändern Sie die Deklaration der Funktion zu verwenden
cdecl
stattstdcall
:Obwohl nach mghie (siehe Kommentare) sollte es nicht einen Unterschied machen, in diesem Fall möchten Sie vielleicht die Verwendung
PChar
stattString
wie das wäre, desto genauer entspricht der C-Deklarationchar*
.String
ist eine Pascal-native Art, die in der Regel verwaltet, ganz anders als einPChar
(obwohl scheinbar nicht so viel in Inno ' s PascalScript).