我试图在我的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
错误。
答案 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
好吧,如果查看LoadLibrary
和GetProcAddress
的声明,您会看到DLL模块句柄由HMODULE
表示。所以我会将此代码翻译为:
type
hDLL430 = HMODULE;
此外,我不会使用FARPROC
而是选择声明一个包含参数,返回值和调用约定的函数指针,以允许编译器强制执行类型安全。