VC dll 接口格式#ifndef HUSBRF_H
#define HUSBRF_H extern "C"
{ _declspec(dllexport) HANDLE OpenHIDDev();
_declspec(dllexport) bool CloseHIDDev(HANDLE HIDHandle);
_declspec(dllexport) bool WriteHIDDev(HANDLE HIDHandle,WORD m_Uid,BYTE m_PipeData,BYTE m_CodeWidth,BYTE m_RptCnt,BYTE m_DelayTime);
_declspec(dllexport) bool WriteHIDDevEx(HANDLE HIDHandle,BYTE OutputReport[9]);
}
1、Delphi 内的调用代码
unit UfrmMain;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TOpenHIDDev=function():Pointer;stdcall;
TCloseHIDDev=function(handle:Pointer):Boolean;stdcall;
TWriteHIDDev=function(handle:Pointer;uid:WORD; pipeData,codeWith,rptCnt,DelayTime:Byte):Boolean;stdcall;
TForm1 = class(TForm)
btn1: TButton;
btn2: TButton;
btn3: TButton;
btn4: TButton;
procedure btn1Click(Sender: TObject);
procedure btn4Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
procedure btn3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
handle:THandle;
end;var
Form1: TForm1;
Handle:THandle;
DevHle:Pointer;
OpenHIDDev:TOpenHIDDev;
CloseHIDDev:TCloseHIDDev;
WriteHIDDev:TWriteHIDDev;implementation{$R *.dfm}procedure TForm1.btn1Click(Sender: TObject);
begin
DevHle := OpenHIDDev();
end;procedure TForm1.btn4Click(Sender: TObject);
begin
CloseHIDDev(DevHle);
end;procedure TForm1.btn2Click(Sender: TObject);
begin
WriteHIDDev(DevHle,4660,0,2,0,0);
end;procedure TForm1.btn3Click(Sender: TObject);
begin
WriteHIDDev(DevHle,4660,0,2,10,0);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
Handle:=LoadLibrary('USBRF.dll');
if Handle = 0 then
MessageDlg('缺少接口Dll文件', mtError, [mbOK], 0);
@OpenHIDDev :=GetProcAddress(Handle,'OpenHIDDev');
@CloseHIDDev :=GetProcAddress(Handle,'CloseHIDDev');
@WriteHIDDev :=GetProcAddress(Handle,'WriteHIDDev');end;procedure TForm1.FormDestroy(Sender: TObject);
begin
FreeLibrary(Handle);
end;end.
静态调用的方式也尝试过,问题一样。
问题是OpenHIDDev 的时候 是正常的,执行WriteHIDDev 的时候就会报内存出错,应该是vc返回的句柄使用出了问题,一直没办法接解决。还请有经验的高手指导。
#define HUSBRF_H extern "C"
{ _declspec(dllexport) HANDLE OpenHIDDev();
_declspec(dllexport) bool CloseHIDDev(HANDLE HIDHandle);
_declspec(dllexport) bool WriteHIDDev(HANDLE HIDHandle,WORD m_Uid,BYTE m_PipeData,BYTE m_CodeWidth,BYTE m_RptCnt,BYTE m_DelayTime);
_declspec(dllexport) bool WriteHIDDevEx(HANDLE HIDHandle,BYTE OutputReport[9]);
}
1、Delphi 内的调用代码
unit UfrmMain;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TOpenHIDDev=function():Pointer;stdcall;
TCloseHIDDev=function(handle:Pointer):Boolean;stdcall;
TWriteHIDDev=function(handle:Pointer;uid:WORD; pipeData,codeWith,rptCnt,DelayTime:Byte):Boolean;stdcall;
TForm1 = class(TForm)
btn1: TButton;
btn2: TButton;
btn3: TButton;
btn4: TButton;
procedure btn1Click(Sender: TObject);
procedure btn4Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
procedure btn3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
handle:THandle;
end;var
Form1: TForm1;
Handle:THandle;
DevHle:Pointer;
OpenHIDDev:TOpenHIDDev;
CloseHIDDev:TCloseHIDDev;
WriteHIDDev:TWriteHIDDev;implementation{$R *.dfm}procedure TForm1.btn1Click(Sender: TObject);
begin
DevHle := OpenHIDDev();
end;procedure TForm1.btn4Click(Sender: TObject);
begin
CloseHIDDev(DevHle);
end;procedure TForm1.btn2Click(Sender: TObject);
begin
WriteHIDDev(DevHle,4660,0,2,0,0);
end;procedure TForm1.btn3Click(Sender: TObject);
begin
WriteHIDDev(DevHle,4660,0,2,10,0);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
Handle:=LoadLibrary('USBRF.dll');
if Handle = 0 then
MessageDlg('缺少接口Dll文件', mtError, [mbOK], 0);
@OpenHIDDev :=GetProcAddress(Handle,'OpenHIDDev');
@CloseHIDDev :=GetProcAddress(Handle,'CloseHIDDev');
@WriteHIDDev :=GetProcAddress(Handle,'WriteHIDDev');end;procedure TForm1.FormDestroy(Sender: TObject);
begin
FreeLibrary(Handle);
end;end.
静态调用的方式也尝试过,问题一样。
问题是OpenHIDDev 的时候 是正常的,执行WriteHIDDev 的时候就会报内存出错,应该是vc返回的句柄使用出了问题,一直没办法接解决。还请有经验的高手指导。
解决方案 »
- access查询按年月统计
- 关于在已经添加CheckBox的TreeView中响应MouseUp事件的提问
- http短信问题(简单)有VB源码不过不知道在Delphi中如何实现,主要是控件不知道
- 请问一个打印的问题,明天就要交差了,大家帮忙啊
- 一个关于字符串“异或”的问题--------在线等待!!!!!
- 请问各位大虾关于打印的一个小问题!
- 请教一个InstallShield X Express打包问题
- 我的程序到了另一台机里用不了数据库,请教用ADO跟OBDC要怎样连接才能解决这个问题?
- 如何判断IMAGE中的内容是否改变过?
- 请问编写桌面程序UI线程的问题
- 如何知道tcomm串口的状态是关闭还是打开
- DELPHI7事件执行的原理,DCOM SOCKET区别
在delphi中声明dll时,换成Cdecl声明试试
很纳闷很多人看见DLL,就用stcall
type
TOpenHIDDev=function():Pointer;Cdecl;
TCloseHIDDev=function(handle:Pointer):Boolean;Cdecl;
TWriteHIDDev=function(handle:Pointer;uid:WORD; pipeData,codeWith,rptCnt,DelayTime:Byte):Boolean;Cdecl;