【发布时间】:2021-06-12 17:14:57
【问题描述】:
我有一个 .h 文件,我需要将其翻译成 Delphi,以调用用 C/C++ 编写的 DLL 接口。
在 32 位中,一切顺利,我可以毫无问题地将 DLL 与 Delphi 应用程序一起使用。
在 64 位中,它不能很好地工作。
这个DLL接口不是我写的,它来自做硬件的第三方。
namespace gXusb {
typedef int INTEGER;
typedef short INT16;
typedef unsigned CARDINAL;
typedef unsigned char CARD8;
typedef float REAL;
typedef double LONGREAL;
typedef char CHAR;
typedef unsigned char BOOLEAN;
typedef void * ADDRESS;
struct CCamera;
extern "C" EXPORT_ void __cdecl Enumerate( void (__cdecl *CallbackProc)(CARDINAL) );
extern "C" EXPORT_ CCamera *__cdecl Initialize( CARDINAL Id );
Cardinal 在 64 位下还是 32 位无符号吗?
我不太确定这种声明此函数类型的方式以及它对 64 位编译的作用:
void (__cdecl *CallbackProc)(CARDINAL)
看起来有点麻烦。
让我困惑的是:
typedef unsigned CARDINAL;
我发现这是 32 位的 32 位 DLL,但它在 64 位 DLL 下是否保持 32 位?
【问题讨论】:
-
您是否尝试混合搭配 32 位和 64 位 exe 和 DLL,因为这不起作用?
-
这个DLL接口有点奇怪,不是我写的。
-
"您是否尝试混合匹配 32 位和 64 位 exe 和 DLL,因为这不起作用?-" -> 不,我的 exe 是 64 位的,并且DLL 也是 64 位
-
unsigned表示unsigned int,其大小与int相同(大多数编译器为32 位)。