如何解决动态库不兼容(delphi 编写的动态库,参数是string型的,我用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不兼容问题




