我想將一個字符串傳遞給我的dll函數,但該函數無法獲取該值。 首先我使用GetMyParam函數從cmd行獲取字符串。這是正確的。然後,我通過 值使用innotest函數我的dll。從inno傳遞字符串到dll時無法獲取dll函數的值?
function innotest(PName:string):Integer;
external '[email protected]:\client\branch\maintain\1.4\bin\sdostate-debug\update.dll stdcall setuponly';
function GetMyParam(PName:string):string;
var
CmdLine : String;
CmdLineLen : Integer;
i : Integer;
begin
Result := '';
CmdLineLen:=ParamCount();
for i:=0 to CmdLineLen do
begin
CmdLine:=ParamStr(i);
if CmdLine = PName then
begin
CmdLine:=ParamStr(i+1);
Result := CmdLine;
Exit;
end;
end;
end;
procedure CurStepChanged(CurStep: TSetupStep);
var
res: String;
begin
if (CurStep = ssPostInstall) and (Pos('setup', WizardSelectedTasks(false)) > 0)then
begin
res := GetMyParam('-myParam');
MsgBox(res, mbInformation, mb_Ok);
innotest(res);
end;
end;
Msgbox具有res值。 這裏是我的dll代碼:字符串的長度爲1
DWORD Update::innotest(string str)
{
LPCWSTR s = StringHelper::ANSIToUnicode(str).c_str();
MessageBox(0,s,0,0);
return 0;
}
什麼版本的InnoSetup你使用ANSI和Unicode?如果是ANSI,那麼這是不可能的。您必須使用Unicode版本的InnoSetup,因爲您在庫中使用了LPCWSTR Unicode字符串,並且當您有ANSI版本的InnoSetup時,字符串會映射到ANSI字符串,並且Unicode字符串沒有類型。 – TLama
我已經實現了將Ansi字符串轉換爲Unicode的StringHelper。這種方式不起作用? – user861491
對不起,我的壞。你的函數有ANSI字符串作爲參數('str'是ANSI字符串),你有Unicode InnoSetup,對不對?如果是這樣,那麼在InnoSetup函數import中將你的參數改爲'PName:AnsiString',你會沒事的。 – TLama