错误:期望的常量或类型标识符

时间:2015-05-15 04:11:33

标签: delphi delphi-7

我试图在我的delphi 7程序中使用外部DLL函数。我在C中有一个例子,其中DLL文件名为。

在C中,它定义如下

#define SerNumAddress 0x1080

HINSTANCE hDLL430;                          // handle of DLL
static FARPROC pMSPGangInitCom  = NULL; // pointer to DLL function

在delphi中我写

unit msp430d;

interface
USES windows, event, paras;

const

SerNumAddress = $1080  ;
pmspganginitcom:FARPROC = nil;

TYPE
hDLL430 = HINSTANCE;

implementation

end.

但我收到constant or type identifier expected错误。

1 个答案:

答案 0 :(得分:3)

问题在于使用HINSTANCE

System单元中有一个名为HInstance的全局变量,它表示包含正在执行的代码的模块句柄。您正尝试将HINSTANCE用作类型。由于变量HInstance,名为HINSTANCE的类型会发生冲突。因此,该类型在HINST单元中翻译为Windows

因此,以下代码将编译:

type
  hDLL430 = HINST;

但是,在我看来,这些天使用HMODULE更为正常。见What is the difference between HINSTANCE and HMODULE?

考虑C代码中的注释:

HINSTANCE hDLL430; // handle of DLL

好吧,如果查看LoadLibraryGetProcAddress的声明,您会看到DLL模块句柄由HMODULE表示。所以我会将此代码翻译为:

type
  hDLL430 = HMODULE;

此外,我不会使用FARPROC而是选择声明一个包含参数,返回值和调用约定的函数指针,以允许编译器强制执行类型安全。