大神帮忙将C的dll函数接口转delphi
范张 2018-05-22 12:57:38 数据结构
struct GetScanDataResult
{
int errorCode;
char message[128];
char data[256];
char reserved[512 - 388];
};
接口定义
int __stdcall GetScanData(GetScanDataResult* result);
接口获取方法
typedef int (__stdcall *GetScanDataFunc_t)(GetScanDataResult*);
// 获 取 接 口 指 针 示 例 :
// HINSTANCE hDllInst = LoadLibraryA("WangShouYinDll.dll");
// GetScanDataFunc_t getScanDataFunc = (GetScanDataFunc_t)GetProcAddress(hDllInst, "GetScanData");
-----------------------------------------------------------------------------------------------------
我的delphi代码
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Button2: TButton;
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
type
PGetScanDataResult = ^GetScanDataResult;
GetScanDataResult = record
errorCode: integer;
message: array [1 .. 128] of Char;
data: array [1 .. 256] of Char;
reserved: array [1 .. 124] of Char;
end;
function GetScanData(result: PGetScanDataResult): integer; stdcall; external 'WangShouYinDll.dll';
implementation
{$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject);
type
PVFN = Function(result: PGetScanDataResult): integer;
var
fn: PVFN;
hDllInst: Thandle;
Tp: TFarProc;
gsdr: PGetScanDataResult;
begin
try
new(gsdr);
hDllInst := LoadLibrary('WangShouYinDll.dll');
Tp := GetProcAddress(hDllInst, 'GetScanData');
fn := PVFN(Tp);
fn(gsdr);
FreeLibrary(hDllInst);
except
on E: Exception do
end;
end;
end.
调用没问题,但一直报地址错误。感谢哪位大神帮帮忙。