我是delphi的新手
我在delphi中有以下导出函数:
function MyFunction(var FirstParam: PChar; var Second: PChar ): Boolean; export; stdcall;
和c ++调用函数是这样的:
typedef bool(*MYFUNC) (char *, char*);
但我得到以下例外:
Unhandled exception at 0x76C1F117 (user32.dll) in MyApp.exe: 0xC0000005: Access violation reading location 0x66646664.
应该是什么原因?,你的回复会对我有所帮助。
非常感谢。答案 0 :(得分:0)
function MyFunction(var FirstParam: PChar; var Second: PChar ): Boolean; export; stdcall;
通过引用传递指针参数(因为var
),
typedef bool(*MYFUNC) (char *, char*);
按值传递它们。你必须使签名匹配。
您还必须匹配调用约定 - Delphi函数显式标记为stdcall
,默认情况下C ++函数可能为cdecl
。
更新:如果我正确理解您的评论,您必须将C ++代码改编为Delphi端。这可能如下所示:
typedef bool __stdcall(*MYFUNC) (char*&, char*&);