我正在创建一个类似下面的C语言dll。
当在Delphi XE等Object Pascal上使用此dll时,如下所示,我遇到了一个崩溃,其中回调函数的地址出现访问冲突。
问题是什么?由于我对C语言是新手,有什么建议吗?
#ifdef TEST_EXPORTS
#define TEST_API __declspec(dllexport)
#else
#define TEST_API __declspec(dllimport)
#endif
#ifdef __cplusplus
extern "C" {
#endif
/* fun accept an argument status_callback which is a function pointer*/
TEST_API void fun(void(*status_callback)(int));
#ifdef __cplusplus
}
#endif
并且fun函数的实现如下:
void fun(void(*status_callback)(int)) {
status_callback(0);
}
当在Delphi XE等Object Pascal上使用此dll时,如下所示,我遇到了一个崩溃,其中回调函数的地址出现访问冲突。
type
TStatusCallBack = procedure( Value: Integer ); stdcall;
T_fun = procedure(cb : TStatusCallback );
procedure BCallBack( Value: Integer ); stdcall;
begin
BStatus := value;
end;
begin
_fun(BCallBack);
end;
实例化代码:
DLLHandle := LoadLibrary( ‘mylib.dll’ );
if (DLLHandle > HDLL_ERROR) then
begin
_fun := T_fun(GetProcAddress( DLLHandle, 'fun');
end;
问题是什么?由于我对C语言是新手,有什么建议吗?
TEST_API
是否表示stdcall
而不是cdecl
? - MBo