将var string从c ++传递给Delphi dll

时间:2016-05-06 09:56:31

标签: c++ delphi dll

我不能在delphi中使用dll的功能。我在转换类型方面遇到了一些问题。

这是我想调用Delphi DLL的函数:

function SyncFunc(var Type:string; var MaxUsers:integer; var ErrCode :Word):boolean;

C ++代码:

unsigned char(WINAPI    *SyncFunc)(PCHAR Type, INT *MaxUsers, WORD *ErrCode);

HMODULE hLib;
BOOL Res = FALSE;
WORD ErrCode = 0;
INT MaxUsers = 0;
CHAR Type[256];
hLib = LoadLibrary("delphi.dll");
Res = SyncFunc(Type, &MaxUsers, &ErrCode);

有人请帮忙。 附:类似的问题C++ consuming delphi DLL(但我的函数使用字符串,而不是WideString)

1 个答案:

答案 0 :(得分:1)

function SyncFunc(var Type:string; var MaxUsers:integer; var ErrCode :Word):boolean;

这里有两个问题:

  1. string是本机Delphi类型,只能由Embarcadero工具创建和使用。此外,由于它使用Delphi运行时堆,因此必须使用ShareMem或类似的。
  2. 该函数使用默认的register调用约定,该约定仅使用Embarcadero工具提供。
  3. 明显的前进方法是修复DLL并安排它使用标准平台互操作类型和调用约定。您可以使用BSTR(Delphi中为WideString)表示字符串,stdcall作为调用约定。

    如果您无法更改DLL,那么您唯一的希望是使用与编译此错误DLL相同的编译器编写适配器DLL。但是只有在使用共享内存管理器编译错误的DLL时,这才有效。如果情况并非如此,那么您的任务几乎是不可能的。