在C++ builder 编译的 obj,为什么不能在Delphi下用呢?请高手指点 ( 积分: 200 )

  • 主题发起人 主题发起人 hotboy
  • 开始时间 开始时间
H

hotboy

Unregistered / Unconfirmed
GUEST, unregistred user!
本人试验将C的obj静态连接到Delphi程序中,一直不成功,请大师指导!
我用C++ builder 编写的代码如下
/////lib.h
# ifndef LIB_H
# define LIB_H
extern "C"
int _stdcall add(int x,int y);
#endif
//////lib.cpp
#include "lib.h"
int _stdcall add(int x, int y)
{
return x+y;
}
用C++ Builder 编译生成 lib.obj文件
然后在delphi中
....
implementation
{$R *.dfm}
{$L lib.obj}
function add(x,y:integer):integer;stdcall;
external;
...
但是Delphi编译出现错误提示:“Unsatisfied forward or external declaration: 'add'”
 
你手动编译看看,就可以了,:)
bcc32 xxx.cpp
 
to nhxz
您的方法刚刚试验过了,不行。
 
不加 _stdcall 呢
 
implementation
{$R *.dfm}
function add(x,y:integer):integer;stdcall;
{$L lib.obj}
 
1.静态链接方式
如果C++程序本身的代码量很小,而且无需担心与C运行库会有交互过程,一般可选用静态链接方式,即把Delphi与C++的目标文件(*.OBJ)链接成最终的可执行文件。具体的方法是使用{$L}编译指令,使Delphi编译器自动读取指定目标文件,说明如下:
function TestFunc:integer;stdcall;
{$L TestFunc.OBJ}
http://blog.sina.com.cn/s/blog_4d60ab10010008vn.html
 
以上方法,都不行的
 
int _stdcall[red] _export [/red]add(int x, int y)
{
return x+y;
}
 
QQ:250198418 可不可以把,OBJ,发一个过来,我试试
 
依然不行。lqcros的QQ加了没反应
 
用 lib.c 就可以了,用 lib.cpp 不行,哪怕是申明了 extern "C"

我已经试过了。
 
后缀名只能为 c, 否则就出如上错误。
 
果然后缀名只能为 c!
谢谢各位!
但是我要是想在Delphi中调用cpp中的函数呢?
extern "C"
真的让我好失望啊
是什么原因让 extern "C"
在这里失效的呢??????????
 

Similar threads

后退
顶部