从SphinxC调用Delphi函数 -

时间:2015-10-30 14:06:16

标签: delphi delphi-2009

我有一个像这样声明的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

2 个答案:

答案 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"); }