CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

如何解决动态库不兼容(delphi 编写的动态库,参数是string型的,我用C++调用是老异常,请高人指点)

楼主dengjieshenhai(深海)2005-06-23 17:26:29 在 C/C++ / C++ 语言 提问

动态库是别人提供的,不能更改了,我怎样才能调用而不异常! 问题点数:100、回复次数:5Top

1 楼xzgyb(老达摩)回复于 2005-06-23 17:37:57 得分 60

delphi的dll中如果包含string  
  c++是无法调用的  
  因为string是delphi中的内置内型,并不是c++中标准库的string  
  是否可以考虑用  
  delphi再作个dll包装一层  
  string的都对外用PChar型  
  Top

2 楼CMyMfc(星际人生:=E.F=FlyForEver)回复于 2005-06-23 17:38:23 得分 20

可能是函数调用习惯的问题,   dephi默认的调用习惯应该是stdcall  
  vc默认是cdcelTop

3 楼akirya(坏[其实偶不是什么所谓的坏人])回复于 2005-06-23 19:42:26 得分 0

同意   CMyMfc   说法,我曾经遇到这种问题Top

4 楼step_by_step(脚印)回复于 2005-06-23 19:53:45 得分 20

对于string来说,在c++中只是basic_string<char>的一个typedef,所以在delphi中我估计肯定没有一样的内存布局的basic_string<char>,而且直接传出concete   class肯定不是一个好的办法,如果编译dll的编译器对于string的布局,和编译exe的编译器对于string的布局不一样,那么程序只有carsh,  
   
  对于dll来说,在dll的边界,最好只返回或者传入普通的build-in类型。如果非要用别的POD的话,安全起见(为了二进制兼容)最好是用#pragma   pack一下。如果是返回或者传入类的指针的话,那么最好不是用concrete   class而是用interface   class(也是为了二进制兼容),在c++中interface   class指的就是类里面仅仅只有纯虚函数的类。  
   
  因此,最好要求这个delphi写的dll重新封装一下,提供char   *的接口,这样就不会出现dll和exe二进制不兼容而导致程序crash的问题了。  
  Top

5 楼foochow(无聊,灌水......)回复于 2005-06-23 19:54:19 得分 0

顶~~   CMyMfcTop

相关问题

  • C#和javascript不兼容?
  • 如何解决动态库不兼容(delphi 编写的动态库,参数是string型的,我用C++调用是老异常,请高人指点)
  • Visual c++6.0与win2000pro不兼容?
  • Delphi的怪问题!delphi在win98和win2000下互不兼容?
  • C#好像自己版本都不兼容阿
  • 难道Delphi与VB对于同一个DLL不兼容?
  • delphi的安装问题,和bcb不兼容吗?
  • C#调用C++:DLL的long类型参数“方法的类型签名与 PInvoke 不兼容错误”
  • [请教]难道C++ Builder与标准C++不兼容?(能解决问题的我多给分,谢谢)
  • C++和java联合开发屏幕截图程序,存在Raster和ColorModel不兼容问题

关键词

  • c++
  • 动态库
  • 二进制
  • delphi
  • dll
  • 调用
  • 布局
  • 问题

得分解答快速导航

  • 帖主:dengjieshenhai
  • xzgyb
  • CMyMfc
  • step_by_step

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo