我目前无法动态导入Delphi DLL。 Delphi DLL函数声明为:
function TEST() : PChar; cdecl;
begin
Result := '321 Test 123';
end;
在C ++中,我这样称呼它:
typedef char *TestFunc(void);
TestFunc* Function;
HINSTANCE hInstLibrary = LoadLibrary("Test.dll");
if (hInstLibrary)
{
Function = (TestFunc*)GetProcAddress(hInstLibrary, "TEST");
if (Function)
{
printf("%s", Function());
}
}
问题是我只收到字符串的第一个字母。 如何告诉C ++字符串在第一个char之后没有结束?
由于
答案 0 :(得分:2)
你有两个问题:
PAnsiChar
匹配,则需要编码为ANSI并返回char*
。您解决第2项的选择:
CoTaskMemAlloc
和CoTaskMemFree
的COM堆。使用共享堆允许您在一个模块中分配,并在另一个模块中解除分配。根据经验,如果能满足您的需求,请务必选择选项1。