如何将c头文件转换为delphi 2006

时间:2010-11-21 14:00:16

标签: delphi

如何翻译以下内容?

1)

#ifndef __LVR_NET_SDK_H__
#define __LVR_NET_SDK_H__

#ifdef __LVR_NET_EXPORT__
#define LVR_NET_API  extern "C" __declspec(dllexport)
#else
#define LVR_NET_API  extern "C" __declspec(dllimport)
#endif

2)

typedef struct {
 DWORD dwAlarmInput;   
         DWORD dwVideoLoss;   
         DWORD dwMotionDetect;  
 DWORD dwVideoCover;  
 DWORD dwReserve[16];  
}LVR_NET_ALARM_INFO, *LPLVR_NET_ALARM_INFO;

3)

LVR_NET_API DWORD __stdcall LvrNetGetSdkVersion();

感谢。

2 个答案:

答案 0 :(得分:2)

(1): 取决于你是否只想使用这个头来连接到C lib,在这种情况下你可以放心地忽略它。

(如果您要将整个包翻译成Delphi,并希望基于它生成DLL,则需要添加

像{$ ifdef LVR_NET_EXPORT} export; {$ endif}到函数声明,在主库文件(以“library”开头的那个)中将函数添加到“exports”子句中(同样{$ ifdef LVR_NET_EXPORT}) )

简而言之:忽略

(2):

  Type LPLVR_NET_ALARM_INFO = ^LVR_NET_ALARM_INFO
       LVR_NET_ALARM_INFO  = Record
                               dwAlarmInput,
                               dwVideoLoss,
                               dwMotionDetect,
                               dwVideoCover    : DWORD;
                               dwReserve       : array[0..15] of DWord;
                             end;   
       TLVR_NET_ALARM_INFO = LVR_NET_ALARM_INFO; // not needed but Delphi style convention

这不一定足够,因为记录打包的方式不是这样定义的。但原始片段也缺乏有关包装的信息。

3)

  function LvrNetGetSdkVersion:DWord; 

  function LvrNetGetSdkVersion:DWord; stdcall; external 'dllname.dll' name 'LvrNetGetSdkVersion';

从dll导入。请注意“名称”部分,您可以在其中调整导入标识符的大小写

答案 1 :(得分:0)

您可以像这样翻译结构:

type
  TLVR_NET_ALARM_INFO = record
    dwAlarmInput : Cardinal;
    dwMotionDetect : Cardinal;
    dwVideoCover : Cardinal;
    dwReserve array [0..15] of Cardinal;
  end;

var
  LVR_NET_ALARM_INFO :  TLVR_NET_ALARM_INFO;

和函数声明:

interface

    function LvrNetGetSDKVersion: Cardinal; stdcall;

implementation

    function LvrNetGetSDKVersion; external 'nameofthedll.dll';

但未经测试的一切都是如此。我希望它有所帮助

同时查看DrBob。在那里你可以找到工具HeadConv,它可以自动将C-Header文件转换为Delphi。很开始,但不完美。