手头上的项目需要我用vc写一个静态库(一定要用静态库,不能是动态库,faint),然后给delphi那边的同事使用,我把生成的obj文件给他们,结果在delphi下不能编译.
请问一下:
这样的静态库要怎么写?
函数的声明在vc和delphi中需要如何定义?
编译的时候要有什么特殊选项么?多谢多谢~!送分儿送分儿~~!
请问一下:
这样的静态库要怎么写?
函数的声明在vc和delphi中需要如何定义?
编译的时候要有什么特殊选项么?多谢多谢~!送分儿送分儿~~!
解决方案 »
- 请教..如何让背景透明呀?SetLayeredWindowAttributes和CRgn都不满足要求...
- 为什么GetPrinterDeviceDefaults耗时太久??
- 可执行映像文件包含哪些内容?
- 难问题一个
- 急问:如何在OnCtlColor里使对话框透明
- winuser.h中怎么没有VK_0到VK_9,VK_A到VK_Z的宏?
- 对话框能拥有工具条吗
- 关闭窗口
- 请问怎样获得打印机属性对话框(不是打印对话框)a,很急!(立即给分!!!)
- MDI如何实现WORD效果的视图窗口?
- 程序在xp下能正常运行,在2000没有反应,怎么办?
- 怎样将另一个工程中的对话框和MENU导入到我现在的工程中来呢?
具体请查看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文件不可用。
使用WINAPI(_stdcall)调用约定
静态库函数声明时用 extern "c" 前缀,Delphi调用声明同调用API
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:)谢谢大家,送分~~~