我不能在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)
答案 0 :(得分:1)
function SyncFunc(var Type:string; var MaxUsers:integer; var ErrCode :Word):boolean;
这里有两个问题:
string
是本机Delphi类型,只能由Embarcadero工具创建和使用。此外,由于它使用Delphi运行时堆,因此必须使用ShareMem
或类似的。register
调用约定,该约定仅使用Embarcadero工具提供。明显的前进方法是修复DLL并安排它使用标准平台互操作类型和调用约定。您可以使用BSTR
(Delphi中为WideString
)表示字符串,stdcall
作为调用约定。
如果您无法更改DLL,那么您唯一的希望是使用与编译此错误DLL相同的编译器编写适配器DLL。但是只有在使用共享内存管理器编译错误的DLL时,这才有效。如果情况并非如此,那么您的任务几乎是不可能的。