| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1420 人关注过本帖
标题:请教:delphi 调用vc++动态链接库问题
只看楼主 加入收藏
yby
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2006-8-25
收藏
 问题点数:0 回复次数:6 
请教:delphi 调用vc++动态链接库问题

vc中声明
_declspec(dllexport) CString LLL(LPCTSTR filename)
并用1.def 中加上LLL变量,防止变量名改变
用vc++调用LLL没有问题
_declspec(dllimport) CString LLL(LPCTSTR filename);

delphi中调用
function LLL(filename:string):string;Stdcall; external '1.dll';

在执行aa:=LLL('d:\1.bmp');时出现错误:
Project Project2.exe raised exception class EAccessViolation with message 'Access violation at address 5F437BAO in module'mfc42d.dll'.Read of address 00000000'.Process stoped.

搜索更多相关主题的帖子: 动态链接库 LLL delphi 变量 filename 
2006-12-06 11:09
volte
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:69
帖 子:1167
专家分:1316
注 册:2004-12-19
收藏
得分:0 
module'mfc42d.dll'
调用出现问题!
可能是访问了没有创建的对象等等!!

大家都是朋友,有空就来坐坐!
2006-12-07 09:46
yby
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2006-8-25
收藏
得分:0 
2006-12-07 17:53
LEAN
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2006-12-8
收藏
得分:0 
volte 版主的的回答不负责任。

vc中声明:
_declspec(dllexport) CString LLL(LPCTSTR filename)
很明显VC里面导出的是CString类型。CString是MFC的类,在Delphi里面肯定不可能直接拿来应用。

解决方法是:

1.在VC中将LLL重新包装一次,且返回LPCSTR
LPCSTR _LLL(LPCTSTR AFileName)
{
return LLL(AFileName).GetBuffer;
}

2.重新导出 _declspec(dllexport) LPCSTR _LLL(LPCTSTR filename);
3.Delphi调用 function _LLL(AFileName: PChar): PChar; stdcall; external '1.dll';
2006-12-08 12:19
volte
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:69
帖 子:1167
专家分:1316
注 册:2004-12-19
收藏
得分:0 

想起来了,CString是VC中的MFC类,
有段时间没接触VC了
我一开始当作是简单的函数返回字符类型


大家都是朋友,有空就来坐坐!
2006-12-08 14:16
volte
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:69
帖 子:1167
专家分:1316
注 册:2004-12-19
收藏
得分:0 
用COM思想可以实现。不过这种方法就要楼主更改DLL了!
Class A{
public:
void Function();
}
Class B{
public:
virtual void _cdecl Function();
privated:
A* aa;
}
void B:B()
{
aa=new A;
}
void B::Function()
{
aa->Function();
}
extern "C" __declspec(dllexport) B* GetBClass(){
return new B;
}

在Delphi中
type
B=class
procedure Function cdecl;virtual;abstract;
end;

function GetBClass:B cdecl;external 'my.dll';
//
var
bb: B;
begin
bb:= GetBClass;
bb.Function();
end;

//---------------------------------------------------------------------------

大家都是朋友,有空就来坐坐!
2006-12-08 14:32
yby
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2006-8-25
收藏
得分:0 
感谢各位的帮忙,后来改用mfc静态库就正常了
2006-12-14 10:40
快速回复:请教:delphi 调用vc++动态链接库问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020266 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved