如何在Delphi中调用VC++的类?

LJN 2000-06-13 04:28:00
我想在VC++中建类(做成DLL),在Delphi中调用.以取两者的优势,可是
不成功,请高人指点一二.
...全文
167 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jun 2000-06-15
  • 打赏
  • 举报
回复
那有新版的ATL啊?我想用ATL建一个有菜单的控件,却一直在发愁呢..:(
longx 2000-06-14
  • 打赏
  • 举报
回复
用COM思想可以实现。
按如下方法.
DLL中
class A{
public:
void Fun1();
}
class B{
public:
virtual void _cdecl Fun1();
privated:
A* m_a;
}
void B:B()
{
m_a=new A;
}
void B::Fun1()
{
m_a->Fun1();
}
extern "C" __declspec(dllexport) B* GetBClass(){
return new B;
}

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

function GetBClass:B cdecl;external 'my.dll';

//使用
var
myB:B;
begin
myB:=GetBClass;
myB.Fun1();
end;


longx 2000-06-14
  • 打赏
  • 举报
回复
各位老兄,别光说不练,你们试过没有?
我可以肯定的说:上面的方法肯定行。我已试过成功了。

Delphi 中类并不一定需要基类!!
windoze 2000-06-14
  • 打赏
  • 举报
回复
longx的方法不行,别的不说,在myB.Fun1()这个地方就会出错,因为Delphi的换名规则和VC不同。
要解决这个问题,看来使用COM是最佳手段。

BTW:其实ATL挺不错的,如果不涉及到过多的界面因素,推荐使用。另外,新版的ATL中包含WTL(Window Template Library),一些不太复杂的界面工作也可以处理了,OutlookExpress就是用WTL写的。
LJN 2000-06-14
  • 打赏
  • 举报
回复
不对吧.好像Delphi的类必须有基类.而你的代码B=class没基类,这样编译会失败的.
WHQ 2000-06-13
  • 打赏
  • 举报
回复
C++的编译器并不保证代码的二进制兼容性,因此你的想法是不可行了
LJN 2000-06-13
  • 打赏
  • 举报
回复
windoze的说法固然可以解决一些问题,但是我感觉那样做局限性太大,
如果我想例示一个对象数组,就不行了.另外这样引用容易造成
内存泄漏和其它弊端.

如果做COM,其实最让人头疼的还是MFC和Delphi的数据类型冲突...
不用MFC又舍不得...

我这贴子再挂几天,再听听高人的见解.
halfdream 2000-06-13
  • 打赏
  • 举报
回复
因为VC与DELPHI 的一些差异,
还不如学得做做COM.
windoze 2000-06-13
  • 打赏
  • 举报
回复
直接使用恐怕很麻烦,因为VC在导出C++函数的时候,进行了换名(Decorate),所以建议你不要直接导出VC类,而是导出几个操作对象的全局函数,并且如下声明:

extern"C"{ // 这样可以防止函数被换名
__declspec(dllexport) int Func(...); // 声明函数为导出函数
// ...
}

在Delphi中,进行如下声明:
function Func(...): Integer; stdcall; external 'SomeDLL.dll';

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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