有些高难度,需要对两种语言的编译器都很熟。怕是没有人能回答出来,先给2分。答得好自然会加分。问题如下:
主程序用delphi写,子函数因为指针处理方面的问题,需要用C写,先用bcc32.exe编译成obj,再用delphi联编成EXE。
加这个编译符就可以了:{$LINK 'FSK.obj'}关键问题是,C语言中的内存管理不想用C的库函数realloc和calloc,而是想使用delphi的库函数AllocMem,ReAllocMem,FreeMem。因为,这些rtl函数在delphi的主程序中也会使用到,所以何必又要去联编C的Lib。这个就麻烦了,第一是怎么在C中进行声明,第二是编译器如何操作进行联编。说明一下版本,delphi是7.0,bcc是那个免费的bcc 5.5.1
不调用库函数的obj联编没有一点问题。

解决方案 »

  1.   

    声明不用你操心,用哪个函数是链接器的事儿,跟编译器没关系
    简单的说,就是在.pas中写个与c语言库符号表中malloc/free等函数表示方式相同的形式,比如:function _malloc(n: Integer): Pointer; cdecl;
    begin
      GetMem(Result, n);
    end; 在链接的时候,链接器就可以使用该符号链接了
    例子可以看delphi提供的jpeg.pas单元,它就是链接到c语言编译的ijl库。新版本的delphi在source目录中直接就有源代码和.obj文件,老版本delphi在光盘目录中也能找到