首先,OBJ文件必须是由Borland C++编译器生成的,不能使用VC生成的OBJ文件,因为两种OBJ文件格式完全不同,无法通用。
其次,最好用C语言,而不要用C++,因为C++会对函数名作修饰。
下面是一个C语言程序,文件名为Test.c
// Test.c
// bcc32 -c Test.c
int _stdcall Test1(int a, int b)
{
return a-b;
}
int _cdecl Test2(int a, int b)
{
return a-b;
}
编译后生成Test.obj,下面是一段Delphi程序,文件名为Demo.dpr,演示如何使用上面两个函数。
program Demo;
{$APPTYPE CONSOLE}
uses Windows, SysUtils, Classes;
{$L Test.obj}
function Test1(A,B:Integer):Integer; stdcall; external;
function _Test2(A,B:Integer):Integer; cdecl; external;
begin
writeln(Test1(5,3));
writeln(_Test2(5,2));
end.
需要注意几点:
一、在两种语言中,函数的调用约定必须相同,C语言中的_stdcall对应DELPHI中的stdcall,C语言中的_cdecl对应DELPHI中的cdecl。
二、如果某个函数调用约定为_cdecl,在DELPHI中,对应的函数名前必须加上下划线。如果调用约定为_stdcall,函数名不变。
三、一旦对C程序做了改动,并且重新编译后,在Delphi中必须Rebuild一下,按F9不行,好像Delphi对OBJ文件做了缓冲。
四、还要注意两种语言中数据类型的对应关系,如int对应integer等。
trackback:http://blog.donews.com/honsan/archive/2005/06/19/436749.aspx