gpt4 book ai didi

delphi - 使用 Delphi 中的枚举参数调用 DLL 中的 C 函数

转载 作者:行者123 更新时间:2023-12-03 15:21:38 25 4
gpt4 key购买 nike

我有一个用 C 编写的第三方 (Win32) DLL,它公开以下接口(interface):

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 类型?整数?词?

最佳答案

在 C 中从外部 DLL 声明接口(interface)的常用方法是在 .H 头文件中公开其接口(interface)。然后,要从 C 访问 DLL,必须在 C 源代码中#include包含 .H 头文件。

转换为 Delphi 术语,您需要创建一个单元文件,用 pascal 术语描述相同的接口(interface),将 c 语法转换为 pascal。

对于您的情况,您将创建一个文件,例如...

unit xyzDevice;
{ XYZ device Delphi interface unit
translated from xyz.h by xxxxx -- Copyright (c) 2009 xxxxx
Delphi API to libXYZ - The Free XYZ device library --- Copyright (C) 2006 yyyyy }

interface

type
TXyzDeviceType = integer;

const
xyzDll = 'xyz.dll';
XYZ_DEVICE_PCI = 1;
XYZ_DEVICE_USB = 2;

function XyzDeviceStatus ( kind : TXyzDeviceType ) : integer; stdcall;
external xyzDLL; name 'DeviceStatus';

implementation
end.

您可以在源代码的 uses 子句中声明它。并以这种方式调用该函数:

uses xyzDevice;

...

case XyzDeviceStatus(XYZ_DEVICE_USB) of ...

关于delphi - 使用 Delphi 中的枚举参数调用 DLL 中的 C 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2643315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com