我有一个像这样声明的Delphi函数
function strcspn(s1, s2: PAnsiChar): Cardinal; cdecl;
我想从SphinxC调用它 - 问题是SphinxC--需要strcspn的名称而不需要任何装饰。
那么如何让forc Delphi在obj文件中设置它?
我会详细询问。
我使用的是SphinxC语言,您可以将其视为Masm汇编程序和c语言的混合体。它可以生成OMF文件格式。
通过链接用SphinxC编译的代码和用bcc32编译的代码(c ++ Builder编译器),我成功地将它与C ++ Builder混合在一起。通过在c ++代码中使用extern“C”术语来告诉bcc32未编程的函数名,同时使用-u-(bcc32命令行otpion)告诉bcc32在没有前缀下划线的情况下引用函数名。
现在我有一些delphi代码,我想将它与我的SphinXC代码混合, 就像我用c ++ Builder做的那样。
所以我的问题是如何强制delphi编译器dcc32来预先设定未编程的函数名?
再次编辑:
这是我对bcc32,dcc32,ilink32
的推荐行表示dc32
dcc32.exe -DMSWINDOWS -JPHNE -I"mypath/include" -U"mypath\lib" -U"mypath\units" mfiley.pas
for bcc32
bcc32.exe -u- -DDEBUG;NO_STRICT -D_RTLDLL;USEPACKAGES -k -c -tWM -v- -Vw -W- -Par -M -Hc -P myfile.cpp
for ilink32
ilink32 -v -Gn -G8 ........ etc
答案 0 :(得分:1)
我的问题是如何强制Delphi编译器dcc32生成未编码的函数名?
这是不可能的。如果您希望使用未编码的函数名,那么您需要使用objconv之类的工具来修改编译后的名称。
一个更大的问题是任何严肃的现实世界Delphi代码都需要Delphi RTL,而且我很少希望你能够静态地将它链接到你的C ++项目。实际上,要将C ++和Delphi代码混合在同一个模块中,需要一个对这两种语言都有深入了解的工具,而该工具就是C ++ - Builder。
答案 1 :(得分:-1)
已经有了C ++ Builder,因此使用带有C ++的Delphi单元非常容易。我会尝试使用objconv。我的最后一个解决方案是从C ++ Builder辅助函数调用delphi的东西。
类似这样的事情
Delphi side function DelhpFunc(s1, s2: PAnsiChar): integer; cdecl; ..... .....C++Builder side
include <....hpp> headre file that made by Delphi
extern "C" { __declspec(naked) int helperFunc()
{ asm { jmp DelhpFunc } } };SphinxC-- side extern int cdecl helperFunc(char* s1,char* s2); main() { helperFunc("hello","there"); }