手头上的项目需要我用vc写一个静态库(一定要用静态库,不能是动态库,faint),然后给delphi那边的同事使用,我把生成的obj文件给他们,结果在delphi下不能编译.
请问一下:
这样的静态库要怎么写?
函数的声明在vc和delphi中需要如何定义?
编译的时候要有什么特殊选项么?多谢多谢~!送分儿送分儿~~!

解决方案 »

  1.   

    DELPHI可以使用使用C/C++的OBJ文件
    具体请查看delphi开发人员指南下面是书中的摘录: Object Pascal能直接访问O B J文件中的代码,但不能访问它的数据(后面,你将会可看到访问其数
    据的技巧),然而P a s c a l的数据可以被O B J文件访问。
    * Object Pascal不能与L I B文件(静态链接库)链接。
    * 包含了C + +类的O B J文件不能被链接,因为其中隐含了对C + +类的RT L的引用,虽然这也可以解
    决,比如把C + +的RT L加入O B J文件中,但是这样做是非常麻烦的。
    * O B J文件必须为Intel OMF格式,这是B o r l a n d编译器生成的一种格式。Microsoft C++编译器生成
    的C O F F格式的O B J文件不可用。
      

  2.   

    项目选择生成Win32静态库(lib)
    使用WINAPI(_stdcall)调用约定
    静态库函数声明时用 extern "c" 前缀,Delphi调用声明同调用API
      

  3.   

    同意楼上的。或者就只能用BCC写。
      

  4.   

    终于解决了,谢谢各位的热心帮助,我把我的解决方法写一下,因为是第一次用C++Builder 和 delphi,所以会总结的很不系统和详细,如果有说错的地方请指教,这方面的资料看来不多,也是留给以后需要的人一个参考吧。C++Builder生成的obj给delphi程序使用需要注意的地方:
    1。如果不是C++代码,建议使用.c文件
    2。如果是C++代码,可以写类(用CPP后缀),但在BCB编译时必须用 -VA-选项
       而且,类的构造和析构函数的声明和定义要写到一起,也就是说把这2个函数的实现写在声明的地方,这一点很重要,不然的话在delphi中会出现 Unsatisfied forward or external declaration: '@$bdele$qpv' 的错误
    3。不能在代码中使用异常处理,因为异常会调用内部函数
    4。最好不要使用类似memcpy,strcpy之类的函数,如果要用的话也可以,不过需要去delphi中去链接相应的obj或者lib,才不至于出现 Unsatisfied forward or external declaration: '_memcpy'的错误
    5。避免编译器将vcl的东西编译进去,比如去掉一些debug的选项等
    6。需要输出给delphi使用的函数要用_cdecl,当然,bcb默认的就是_cdecl
    7。如果需要输出class给delphi使用,这个我就没有试验了,因为实在不了解delphi:)谢谢大家,送分~~~