【发布时间】:2014-02-05 10:13:41
【问题描述】:
我在一个 DLL 中有两个 C 函数,它们在定义文件中定义并导出以在 Inno Setup 中使用。
char* __stdcall GetName()
{
return "Kishore";
}
void __stdcall getName(char* strName)
{
strcpy(strName, "Kishore");
}
Inno Setup 代码将加载自定义 DLL 并调用函数/过程以返回名称
{ Inno Setup script }
[Code]
procedure getName(MacAddress: String);
external 'getName@files:MyDll.dll stdcall setuponly';
function GetName():PAnsiChar;
external 'GetName@files:MyDll.dll stdcall setuponly';
function NextButtonClick(CurPage: Integer): Boolean;
var
StrName: String;
begin
SetLength(StrName,15);
getName(StrName); { displaying only single character }
StrName := GetName(); { this call is crashing }
end
如何在 Inno Setup 脚本中检索名称而不使其崩溃?
【问题讨论】:
-
将
getName函数原型更改为使用AnsiString而不是string,因为您使用了 Unicode 版本的 Inno Setup 但char键入您的 C 代码。并且,不要使用您的GetName函数,因为这将是 DLL 需要为语义错误的字符串分配和释放内存。 -
我想从 getName 中检索值并将“StrName”用于某种目的,名称显示在 dll 中,但是当它返回到 inno 脚本时,字符值是个位数。有了你的建议也没有用
标签: dll inno-setup return-value pascalscript