如何翻译以下内容?
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();
感谢。
答案 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。很开始,但不完美。