动态库兼容问题---- 为什么 delphi 2006 调用低版(delphi 6.0)的DLL时,会出错!!(急!!给高分!!)

flyzerg 2006-04-11 04:00:03
delphi 6.0下的动态库为project2.dll 定义如下:
------------------------------
library Project2;
uses
sharemem,
SysUtils,
Classes,ADODB;

{$R *.res}
procedure exeselect(var adoquery1:tadoquery;constr,sqlstr:string;yn:boolean);stdcall;
begin
if constr<>'' then
adoquery1.ConnectionString :=constr;

adoquery1.Active :=false;
adoquery1.SQL.Clear ;
adoquery1.SQL.Add(sqlstr);
if yn then
adoquery1.Active :=true
else
adoquery1.ExecSQL ;

end;

exports exeselect;

begin
end.
-------------------------------------
delphi 2006 调用时,申明为:
procedure exeselect(adoquery1:tadoquery;constr,sqlstr:string;yn:boolean);stdcall;external 'project2.dll';

--------------------------------------------------
当调用时就出现错误
值的一题的是,如果在delphi 2006环境下编写project2.dll 调用是就没有问题!!!为什么????
...全文
140 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
flyzerg 2006-04-14
  • 打赏
  • 举报
回复
谢谢各位!问题已经解决,是sharemem的问题,去掉sharemam就可以运行了!!!
zkyylove 2006-04-12
  • 打赏
  • 举报
回复
2006是基于.NET框架的,理论来说,WIN32是不能呼叫.NET框架的DLL,.NET是可以呼叫WIN32的,就和阿日说的一样,不过不需要在D2006下编译
aiirii 2006-04-11
  • 打赏
  • 举报
回复
应该有两个选择,
1, dll 代码在 d2006下编译多一次

2, 不要uses sharemem, 将所有的 string 改为 pchar
cncharles 2006-04-11
  • 打赏
  • 举报
回复
procedure exeselect(adoquery1:tadoquery;constr,sqlstr:string;yn:boolean);stdcall;

implementaion

procedure exeselect external 'project2.dll' name 'exeselect';

调用这样才行吧


flyzerg 2006-04-11
  • 打赏
  • 举报
回复
不行,试过了,换成pchar后,也有问题!!!
halfdream 2006-04-11
  • 打赏
  • 举报
回复
如果我猜得不错,该是string作参数传递的问题.
建议使用PCHAR型传入.

D2006是底层改变了一个前几个DELPHI版本未变的东西,就是替换了原来的内存管理器.
估计是这样造成你的问题.

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧