有专有DLL头声明:在免帕斯卡回调从C++ DLL
class CJDummyClass
{
};
typedef CJDummyClass * J_IMG_CALLBACK_OBJECT;
#ifdef __BORLANDC__
typedef void (__stdcall*J_IMG_CALLBACK_FUNCTION)(J_tIMAGE_INFO * pAqImageInfo);
#else
typedef void (CJDummyClass::*J_IMG_CALLBACK_FUNCTION)(J_tIMAGE_INFO * pAqImageInfo);
#endif
另外有一个导出的函数来回调函数链接到DLL,然后它可以处理某些数据放置在存储器通过指针pAqImageInfo
我在FreePascal中编写使用这个DLL的应用程序,几乎所有我需要成功翻译,动态链接和包装成一个类,但现在我有回调函数的问题。 这里是我的代码部分:
interface
type
pJ_tIMAGE_INFO = ^J_tIMAGE_INFO;
TJ_IMG_CALLBACK_FUNCTION = procedure(const pAqImageInfo: pJ_tIMAGE_INFO) of object; cdecl;
PJ_IMG_CALLBACK_FUNCTION = ^TJ_IMG_CALLBACK_FUNCTION;
TJaiFactory = class(TObject)
.....
procedure ImageCallback(const pAqImageInfo: pJ_tIMAGE_INFO); cdecl;
.....
end;
implementation
procedure TJaiFactory.ImageCallback(pAqImageInfo: pJ_tIMAGE_INFO); cdecl;
begin
// some data processing here
end;
Insidy我ImageCallback我pAqImageInfo =零,而不是一些实际的指针。我怀疑我必须以其他方式定义回调的类型或参数,但我不知道如何。
第一个问题:如果在C++中有一个void函数,那么就我所知,它是Pascal方面的过程,它应该被定义为过程或函数的某些指针结果(但没有实际结果)?
第二个问题:如果函数在C++中声明为类的成员,那么将此函数的类型转换为Pascal的正确方法是什么?我不确定“this”指针会发生什么。
谢谢。
谢谢。但是我仍然不了解有关调用会员函数的约定。我应该如何在Pascal中声明它?我应该声明一些东西还是提供一些使回调正确的东西?我不确定,但它看起来像指针无零是“这个”。我也试过stdcall,结果是一样的 - 无指针。 –
DLL是x86吗?什么是DLL正在使用的编译器?在Free Pascal中为成员函数调用约定与Delphi相同?我不了解Free Pascal。但是,在Delphi中,第一个参数在'edx'寄存器中传递。 – UltimaWeapon
DLL是x86,免费的Pascal编译器也是x86,并且在delphi兼容模式下(当它处于默认objfpc模式时,回调函数根本没有链接)。 –