大神帮忙将C的dll函数接口转delphi

范张 范张 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
数据结构
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.


调用没问题,但一直报地址错误。感谢哪位大神帮帮忙。


...全文
评论 5
收藏 已收藏
分享
返回顶部