使用 Delphi 中的枚举参数调用 DLL 中的 C 函数
我有一个用 C 编写的第三方 (Win32) DLL,它公开以下接口:
DLL_EXPORT typedef enum
{
DEVICE_PCI = 1,
DEVICE_USB = 2
} DeviceType;
DLL_EXPORT int DeviceStatus(DeviceType kind);
我希望从 Delphi 调用它。
如何访问 Delphi 代码中的 DeviceType 常量?或者,如果我应该直接使用值 1 和 2,那么我应该为“DeviceType kind”参数使用什么 Delphi 类型?整数?单词?
I have a third-party (Win32) DLL, written in C, that exposes the following interface:
DLL_EXPORT typedef enum
{
DEVICE_PCI = 1,
DEVICE_USB = 2
} DeviceType;
DLL_EXPORT int DeviceStatus(DeviceType kind);
I wish to call it from Delphi.
How do I get access to the DeviceType constants in my Delphi code? Or, if I should just use the values 1 and 2 directly, what Delphi type should I use for the "DeviceType kind" parameters? Integer? Word?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
在 C 中从外部 DLL 声明接口的常用方法是在 .H 头文件中公开其接口。然后,要从 C 访问 DLL,必须在 C 源代码中#include 包含 .H 头文件。
转换为 Delphi 术语,您需要创建一个单元文件,用 pascal 术语描述相同的接口,将 c 语法转换为 pascal。
对于您的情况,您将创建一个文件,例如...
并且您将在源代码的
uses
子句中声明它。并以这种方式调用该函数:The usual way to declare the interface from an external DLL in C is to expose its interface in a .H header file. Then, to access the DLL from C the .H header file has to be
#include
d in the C source code.Translated to Delphi terms, you need to create a unit file that describes the same interface in pascal terms, translating the c syntax to pascal.
For your case, you would create a file such as...
And the you would declare it in the
uses
clause of your source code. And invoke the function this way:C++ 中枚举的默认基础类型是 int(无符号 32 位)。您需要在 Delphi 中定义相同的参数类型。关于枚举值,您可以使用硬编码的 1 和 2 值从 Delphi 调用此函数,或者使用任何其他 Delphi 语言功能(枚举?常量?我不知道这种语言),这会给出相同的结果。
Default underlying type for enum in C++ is int (unsigned 32 bits). You need to define the same parameter type in Delphi. Regarding enumerated values, you can use hard-coded 1 and 2 values to call this function from Delphi, or use any other Delphi language feature (enum? constant? I don't know this language) which gives the same result.
当然,您可以使用 Integer 并直接传递常量,但使用通常的枚举类型声明函数更安全。它应该是这样的(注意“MINENUMSIZE”指令):
Sure, you can use Integer and pass constanst directly, but it is more safe to declare function with using usual enum type. It should be like this (note "MINENUMSIZE" directive):