动态库的问题(150)

  • 主题发起人 主题发起人 爱上猫的鱼
  • 开始时间 开始时间

爱上猫的鱼

Unregistered / Unconfirmed
GUEST, unregistred user!
{向指定地址写数据}function swr_24c01a(icdev: THandle;
offset: Integer;
len: Integer;
data_buffer:PChar): Integer;
stdcall;
external Dll_MWI_C32;
{从指定地址读数据 }function srd_24c01a(icdev: THandle;
offset: Integer;
len: Integer;
data_buffer:PChar): Integer;
stdcall;
external Dll_MWI_C32;{检查读写设备中是否有24c01a卡插入}function chk_24c01a(icdev: Integer): Integer;
stdcall;
external Dll_MWI_C32;{说明:检查读写设备中是否有24c01a卡插入调用:icdev: 通讯设备标识符返回:<0 错误=0 正确} //打开串口 0 表示 串口1 1 表示串口2 function ic_init(port: Integer;baud: LongInt): THandle ;
stdcall ;
external Dll_MWI_C32;
//关闭串口 function ic_exit(icdev: THandle): Integer ;
stdcall ;
external Dll_MWI_C32;
//检测卡型号 function chk_card(icdev: THandle): Integer;
stdcall;
external Dll_MWI_C32 ;
//对卡上电 function turn_on(icdev: THandle): Integer;
stdcall;
external Dll_MWI_C32 ;
//给卡下电 function turn_off(icdev: THandle): Integer;
stdcall;
external Dll_MWI_C32 ;怎么样调用上边的动态库啊,由其是THandle的参数,怎么用,有例子的最好给我个例子,谢谢大家了所有分,全部奉上了
 
可以自己稍微封装一下,然后以类的方式来调用,我就简单写几句,其余的自己补充首先把上面的声明复制到同一步UNIT里,然后实现以后类TDLL = classprivate FICDV: THandle;public constructor Create(ICDV: THandle);
destructor Destroy;
override;
function WriteData(offset,len: Integer;
data_buffer:PChar): Integer;
function ReadData(offset,len: Integer;
data_buffer:PChar): Integer;
end;
implementationconstructor TDLL.Create(ICDV: THandle);
begin
FICDV := ICDV;
end;
function TDLL.WriteData(offset,len: Integer;
data_buffer:PChar): Integer;
begin
result := swr_24c01a(FICDV, offset, len, data_buffer);
end;
function TDLL.ReadData(offset,len: Integer;
data_buffer:PChar): Integer;
begin
result := srd_24c01a(FICDV, offset, len, data_buffer);
end;
其余方法以上面的形式实例,以后使用这个类实例就行了,例如:var A: TDLL;
data: string;
buf: array [1..1024] of char;
begin
A := TDLL.Create(form1.handle);
data := 'abcd';
A.WriteData(1, length(data), @(data[1]));
a.ReadData(1, 100, @buf);。。。end;
 
有好的例子吗?
 
下面这个函数返回的句柄,就是其他函数中需要传入的参数:function ic_init(port: Integer;baud: LongInt): THandle ;
stdcall ;
external Dll_MWI_C32;例如:procedure abc();varaa: THandle;
begin
aa := ic_init(1, 9600): //...ic_exit(aa);
end;
 
没有会的吗
 
THandle不过是一个Longword而已.有什么不会用的?
 
我给你一个动态调用Dll的例子希望对你有帮助unit U_IniRegGlobal_Dll;interfaceuses Windows,forms;//声明type TWriteIniInfo = function (Ahand:THandle;ASection,AItem,AValue:Pchar;AIniFileName:Pchar=nil):boolean;stdcall;//常量Dll的名称const DLlName='Ini_RegDll.dll';//调用procedure Ini_WriteIniInfo(ASection,AItem,AValue:string;AIniFileName:string='');var lhnd:integer;
pp:TWriteIniInfo;
begin
try lhnd:=LoadLibrary(Pchar(DLlName));
//装载DLL if lhnd = 0 then
begin
InfoMsg('调用DLL失败!');
exit;
end else
begin
@pp:=GetProcAddress(lhnd,PChar('WriteIniInfo_Dll'));//参数说明:DataConnect 动态库里入口函数的名称 if @pp <> nil then
begin
if not pp(lhnd,Pchar(ASection),Pchar(AItem),Pchar(AValue),Pchar(AIniFileName)) then
InfoMsg('写数据到Ini文件时发生错误');
end;
end;
finally freelibrary(lhnd);
end;
end;
 
继续求例子!!!!!!!!!!!!!
 
我记得明华读卡器里面有案例,留下你的EMAIL
 
constructor TDLL.Create(ICDV: THandle);
begin
FICDV := ICDV;// 关键是这儿 FICDV:=CreateOneCommPort('COM1',20,9600,1,8);// 例如end;
 
这么明白了还不懂?要什么参数就传递什么参数啊读发卡器的例子我有大把,不过今天在公司 没带
 
多人接受答案了。
 

Similar threads

I
回复
0
查看
677
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部