用C++编写的DLL中的一个类,如何输出给Delph、VB等语言调用?

Seahilly 2006-02-25 11:14:04
本人用C++编写了一个类,其中的方法采用虚拟特性,这样只要输出类的建构方法,就可以用虚拟标得的方式访问类的所有虚拟方法。用C++可以,用Delphi不行,不知为什么?
...全文
220 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Seahilly 2006-02-28
  • 打赏
  • 举报
回复
难道没人能回答?
Seahilly 2006-02-27
  • 打赏
  • 举报
回复
??
Mephisto_76 2006-02-27
  • 打赏
  • 举报
回复
应该是可以的,因为C中有结构,只要在C++走使用抽象的类,即基类中所有的成员方法都是纯虚方法。在派生的每个DLL都提供一个CreateObject和DestroyObject方法以创建和消除当前的派生对象。用LoadLibray和GetProcAddress来动态取得基类对象的指针,通过基类对象指正进行调用。
xiayuxia 2006-02-27
  • 打赏
  • 举报
回复
vb里面 不是也一样可以 调用 LoadLibrary api的吗?
Seahilly 2006-02-27
  • 打赏
  • 举报
回复
??
langzi8818 2006-02-26
  • 打赏
  • 举报
回复
没有试过。。。
COM好了用
奥爸 2006-02-26
  • 打赏
  • 举报
回复
我估计不能实现
Seahilly 2006-02-26
  • 打赏
  • 举报
回复
??
Seahilly 2006-02-26
  • 打赏
  • 举报
回复
我的问题可能是:用C++编写的Dll,Dll内有类输出(虚拟表方式),如何使其能够在其他语言中调用?
wshcdr 2006-02-26
  • 打赏
  • 举报
回复
不明白LZ的意思

就算用COM,在VB中也不可以使用其中的类吧
YufengShi 2006-02-26
  • 打赏
  • 举报
回复
c++写的dll还是用com吧
不然就学学win32api,不过不要用类.
Seahilly 2006-02-26
  • 打赏
  • 举报
回复
谢谢大家的回答。原来我用这个方法,将微软VC++的类(有MFC)映射出来,并且在Delphi、VB中使用(实际是COM规范)。但是改用微软的C++ 后,则调用程序能够连接到Dll,但是C++的DllMain都没有驱动,创建类的导出函数也不能用。
Jagen在路上 2006-02-26
  • 打赏
  • 举报
回复
这种方法只能适用于相同的C++编译器,即使都是C++编译器,但是属于不同厂商也是不行的,有时甚至同一个厂商不同版本都不行。因为C++有一个概念叫作ABI,即应用程序二进制接口,不同厂商或不同版本的ABI很难相同,这就导致楼主所描述之方法无法实现。

但是如果在编程中强制使用某些二进制规范的话,比如COM规范,使可以做到的,但这往往需要操作系统的支持才行。可行的方法是采用API方式导出具体函数,因为每个可以运行在Windwos上的编译器在这里必须相同。
guyanhun 2006-02-26
  • 打赏
  • 举报
回复
如果c++编写一个类供其他语言调用的话,
好像要用 extern “C”,
避免编译器为函数改名,因为c++支持函数重载,
往往函数的真实名字不是原本的名字了。
Seahilly 2006-02-25
  • 打赏
  • 举报
回复
提问中有错字:
本人用C++编写了一个类,其中的方法采用虚拟特性,这样只要输出类的建构方法(用一个函数),就可以用虚拟表的方式访问类的所有虚拟方法。用C++可以,用Delphi不行,不知为什么?

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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