В настоящее время у меня возникают проблемы с динамическим импортом DLL-библиотеки Delphi.
Функция DLL Delphi объявлена как здесь:
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 ++, что строка не заканчивается после первого символа?
Спасибо
У вас есть две проблемы:
PAnsiChar
, если вы хотите, чтобы против char*
,Ваши варианты решения пункта 2:
CoTaskMemAlloc
а также CoTaskMemFree
, Использование общей кучи позволяет выделить в одном модуле, а освободить в другом.Как правило, всегда предпочитайте вариант 1, если он может удовлетворить ваши потребности.
Других решений пока нет …