有個dll檔案名稱為cesi.dll
C中有幾個函式定義如下:
#ifdef ID_FPRCAP_EXPORTS
#define ID_FPRCAP_API __declspec(dllexport)
#else
#define ID_FPRCAP_API __declspec(dllimport)
#endif
1、ID_FPRCAP_API int __stdcall LIVESCAN_GetBright(int nChannel,int *pnBright);
2、ID_FPRCAP_API int __stdcall LIVESCAN_GetFPRawData(int nChannel,unsigned char *pRawData);
3、ID_FPRCAP_API int __stdcall LIVESCAN_GetDesc(char pszDesc[1024]);
4、ID_FPRCAP_API int __stdcall LIVESCAN_SetBufferEmpty(unsigned char *pImageData, long imageLength);
咋樣把他們轉化為delphi的函式并呼叫,例如1、 我的delphi為:
function LIVESCAN_GetBright(nChannel:integer;pnBright:pInteger): integer; stdcall; external 'cesi.dll' name 'LIVESCAN_GetBright';
他的呼叫
procedure TForm1.Button9Click(Sender: TObject);
var
lddbd1,tdh:integer;
ld:PInteger;
begin
tdh:=1;
lddbd1:=LIVESCAN_GetBright(tdh,ld);//lddbd1為1時函式呼叫成功,否則失敗
Memo2.Text:=inttostr(integer(dbd^));
end;
這樣總是呼叫失敗。
誰能不能幫我把上面4句C函式定義轉為delphi 并用button控制元件形式呼叫下(返還值為1則成功,否則失敗)
先謝謝大家了
uj5u.com熱心網友回復:
function LIVESCAN_GetBright(nChannel:Integer; pnBright:pInteger{此處可用var nBright:Integer,需測驗^_^}):Integer;stdcall; external 'cesi.dll';function LIVESCAN_GetFPRawData(nChannel:Integer; pRawData:PByte):Integer;stdcall; external 'cesi.dll';
function LIVESCAN_GetDesc(pszDesc:PAnsiChar):Integer;stdcall; external 'cesi.dll';
function LIVESCAN_SetBufferEmpty(pImageData:PByte; imageLength:LONG):Integer;stdcall; external 'cesi.dll';
procedure TForm1.Button9Click(Sender: TObject);
var
nResult:Integer;
nBright, nChannel:Integer;
begin
nChannel := 1;
nBright := 0;
nResult := LIVESCAN_GetBright(nChannel, @nBright);//如果申明為var nBright:Integer,此處不需要@取地址
Memo2.Text := 'Result=' + IntToStr(nResult) + ' -> ' + 'nBright=' + inttostr(nBright);
end;
uj5u.com熱心網友回復:
procedure TForm1.Button9Click(Sender: TObject);var
szDesc:array[0..1024 - 1] of AnsiChar;
nResult:Integer;
begin
nResult := LIVESCAN_GetDesc(@szDesc[0]);
end;
uj5u.com熱心網友回復:
stdcall->cdecluj5u.com熱心網友回復:
extern "C"{
...
}
uj5u.com熱心網友回復:
查一下dll函式的命名方法轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/137974.html
下一篇:急!需幫忙
