这个Dll怎么调用(300分)

  • 主题发起人 主题发起人 Avenir
  • 开始时间 开始时间
A

Avenir

Unregistered / Unconfirmed
GUEST, unregistred user!
有个Dll,可能是VB或VC写的
说明:
工作空间为 xxxx,类名xxxxxxxxx,类的一个开放的方法 aaaa();
问题:
我怎么在Delphi里调用这个类和类的方法aaaa(),要做哪些准备工作?
 
1.DLL 的函数输出,一般是通过在写 DLL 程序时在 Exports 段写明输出函数
Exports
aaaa;
2.调用时,就可以这样写:
Function aaaa ;external 'XXXX.DLL' Name 'aaaa';
3.假如这个函数是有参数的,就需要在我们的程序里写一下这个函数的调用形式,例如:
Function aaaa(Index:Integer):integer;Stdcall;
这表明需要在函数调用时给一个 Integer 类型的参数,其返回值是一个 Integer 类型。
Stdcall,是告诉 Delphi 在调用时用一个 try 块封装它。
4.如上做完,使用这个函数就和我们自己在程序里的其他函数一样使用了。
还有一种办法就是使用 Win32API 在使用的时候将这个 Dll 装入进来,找到 aaaa 函数,
然后使用。
总之,DLL 正常使用是无法涉及 Dll 内部对象的,要调用它内部定义的类,就有点困难,
不过 DFW 上高手如云,假如你的问题可以更明确或确实让人着迷,被解决掉也是有可能
的。
 
如果不是个类和类的方法,我就不用到这问了
如果是用Delphi写的,也没多大问题
关键写这东西的狗崽子不知道用的是VB还是VC,不过象什么命名空间一类的东西我在VB里见过,但调Dll里的没见过
我不想问他们,因为我觉得他们水平太差,明明简单的东西,偏搞复杂
项目完全可以写个类似API函数来解决,这帮龟孙子偏要来点复杂的,TMD
 
呵呵,脾气挺大的。我的估计它是一个 COM 对象。你可以试着用 Delphi 导入类型库
的方法把它做为 COM 来导入,如果可以导入,就表明它确实是个做成 DLL 的 COM
应用。
 
估计是VB写的东西,用DELPHI无法调用,只能VB才能调用。我曾遇到过,客户的MIS系统是用
VB写的,而我必须用他写的DLL去连接MIS系统,没法只好再用VB写个中间件去连接他的DLL
和我自己的系统。TNND搞得特复杂。
 
试着用Tdump察看dll文件,看看结构。
TDump aaa.dll aaa.txt
我碰到和你类似的问题,那家伙是用VC写的,我怎么都调用不了,最后用Tdump一看,原来
是定义的函数名已经变得面目全非,和那家伙在VC里面的定义完全不一样,在函数后面多了
些字母,虽然不太懂是什么原因造成的,但是按照实际的已经变化的函数名来引用,就OK了
 
我也遇到过,他们的dll用vc写的,我可以调用了(传递结构指针),但是不稳定,
有时候莫名其妙程序退出了.到现在还没解决.TMD+TNND.
 
这么长时间了,
想结束可又不忍,大家还有什么意见没?
应该是.net 下开发的Dll,Delphi5能用吗?
 
那估计现在是不能用,。NET下复杂的要命呀
 
我让他们提供标准API风格的函数接口,他们竟然要开放数据库,让我直接访问
难道做标准API风格的函数比这什么空间异类的东东还复杂吗,TNND
不过现在项目暂停了,我也懒的去理
 
procedure PDllForm(Const Adllfile,amfunction:string);
var
mFunction:function(AHdle:integer;ALoginID,ADeptID,ADeptName,AUserName,APwd,ASocketIP,AModuleName,ALocalIP:pchar;APHdle:integer;ADHdle:integer):boolean;stdcall;//开放方法的声明
begin

mhandle:= LoadLibrary(pchar('../dlls/'+trim(adllfile)));
if mhandle<=0 then
begin
application.MessageBox(pchar('动态链接库'+adllfile+'加载失败。'+#13+'错误代码是:'+inttostr(getlasterror)),'动态连接库加载失败',mb_ok or mb_iconerror);
exit;
end;
@mFunction:=getprocaddress(mhandle,pchar(amfunction));
if @mfunction<>nil then
begin
mfunction(application.Handle,pchar(userinfo.loginid),pchar(userinfo.deptid),pchar(userinfo.deptname),pchar(userinfo.username),pchar(userinfo.userpwd),pchar(hostip),pchar('dddd'),pchar('127.0.0.1'),frm_appmain.Handle,mhandle);
end;
freelibrary(mhandle);
end;
 
没办法,你们公司那些用VB的脑子进了水!
 
动态链接
象上面老兄那样
qq:71892967
 
是啊,这年代还用vb的人脑子都进水了。
 
后退
顶部