문자열을 내 dll funcfion에 전달하려고하지만 함수에서 값을 가져올 수 없습니다. 먼저 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 코드입니다 : 당신은 InnoSetup 직접 도달 할 수없는 메모리에 일련의 문자 어떤 함수 매개 변수 string
유형을 사용하고 1
DWORD Update::innotest(string str)
{
LPCWSTR s = StringHelper::ANSIToUnicode(str).c_str();
MessageBox(0,s,0,0);
return 0;
}
InnoSetup의 어떤 버전을 사용하고 ANSI 또는 유니 코드입니까? ANSI라면 이것이 불가능합니다. 라이브러리에서 LPCWSTR 유니 코드 문자열을 사용하고 있기 때문에 Unicode 버전의 InnoSetup을 사용해야하며 ANSI 버전의 InnoSetup을 사용하는 경우 문자열이 ANSI 문자열에 매핑되고 유니 코드 문자열 유형이 없습니다. – TLama
나는 Ansi 문자열을 유니 코드로 변환하기 위해 StringHelper를 구현했다. 이 방법은 효과가 없습니까? – user861491
죄송합니다. 내 잘못입니다. 함수는 ANSI 문자열을 매개 변수로 가지며 ('str'은 ANSI 문자열 임) 유니 코드 InnoSetup을 가지고 있습니까? 그렇다면 InnoSetup 함수 import에서 매개 변수를'PName : AnsiString'으로 바꾸면됩니다. – TLama