int WINAPI BiMICRSetReadBackFunction(
int nHandle,
int (CALLBACK *pMicrCB)(void),
LPBYTE pReadBuffSize,
LPBYTE readCharBuff,
LPBYTE pStatus,
LPBYTE pDetail);
typedef int (CALLBACK* MICRCallback)(void);
typedef int (CALLBACK* StatusCallback)(DWORD);
int WINAPI BiSetInkStatusBackFunction(int nHandle,
int (CALLBACK *pStatusCB)(DWORD dwStatus)
);
我需要将此函数转换为Delphi。
我尝试使用headconv4.2
,但生成的静态单元未完成,编译时出错。
提前感谢您的帮助:D
答案 0 :(得分:3)
假设WINAPI
和CALLBACK
始终为__stdcall
,DWORD
为unsigned int
且LPBYTE
为unsigned char *
,您可以尝试这个脏转换我做了:
unit UHeader;
interface
// Data types
type
PByte = ^Byte;
PPByte = ^PByte;
// Prototypes
type
TMICRCallback = function: Integer; stdcall;
TStatusCallback = function(dwParam: Cardinal): Integer; stdcall;
// Functions
type
TBiMICRSetReadBackFunction =
function(nHande: Integer;
pMicrCB: TMICRCallback;
pReadBuffSize: PByte;
readCharBuff: PByte;
pStatus: PByte;
pDetail: PByte
): Integer; stdcall;
var
BiMICRSetReadBackFunction: TBiMICRSetReadBackFunction;
type
TBiSetInkStatusBackFunction =
function(nHandle: Integer;
pStatusCB: TStatusCallback
): Integer; stdcall;
var
BiSetInkStatusBackFunction: TBiSetInkStatusBackFunction;
implementation
end.
但是,我不完全确定,如果这是正确的......但这可能是你试图自己转换它的途径。
答案 1 :(得分:2)
字面翻译将是:
type
MICRCallback = function: Integer; stdcall;
StatusCallback = function(dwStatus: DWORD): Integer; stdcall;
function BiMICRSetReadBackFunction(
nHandle: Integer;
pMicrCB: MICRCallback;
pReadBuffSize: PByte;
readCharBuff: PByte;
pStatus: PByte;
pDetail: PByte
): Integer; stdcall;
function BiSetInkStatusBackFunction(
nHandle: Integer;
pStatusCB: StatusCallback
): Integer; stdcall;
如果要从DLL导入函数,则需要将DLL文件名添加到函数声明中:
function BiMICRSetReadBackFunction(
nHandle: Integer;
pMicrCB: MICRCallback;
pReadBuffSize: PByte;
readCharBuff: PByte;
pStatus: PByte;
pDetail: PByte
): Integer; stdcall; external 'filename.dll';
function BiSetInkStatusBackFunction(
nHandle: Integer;
pStatusCB: StatusCallback
): Integer; stdcall; external 'filename.dll';