我有一个c功能' cGetLen'我想从delphi2009中调用它,但得到了上面的标题错误。
有什么帮助吗?
这是代码
unit testpas;
interface
function dFunc():Integer ; stdcall;
implementation
function cGetLen(str1, str2: PAnsiChar): Integer ; cdecl; external;
function dFunc():Integer ; stdcall;
var
fstr1: ANSIString;
sstr2: ANSIString;
begin
fstr1 := 'hello';
sstr2 := 'there';
dFunc := cGetLen( PAnsiChar(fstr1), PAnsiChar(sstr2) );
end;
begin
end.
答案 0 :(得分:4)
第一个问题是您没有链接外部对象。您需要包括:
{$LINK cGetLen.obj} // or whatever the object file is called
单位的某个地方。
一旦你完成了,你可能会面临另一个问题,因为C编译器将装饰该函数的名称。通常,对于cdecl
函数,通过为下划线添加前缀。所以你可以导入这样的函数:
function cGetLen(str1, str2: PAnsiChar): Integer ; cdecl; external name '_cGetLen';
或
function _cGetLen(str1, str2: PAnsiChar): Integer ; cdecl;
您将面临的另一个常见问题是C函数调用其他无法解析的函数。它们需要在您链接的单独目标文件中实现,或者在Pascal代码中实现。
请记住,我看不到您的C代码,也不知道您是如何编译它的。所以,这些问题可能不会影响你,或者你可能面临其他问题。像这样的互操作问题确实需要完全披露。
说实话,你似乎距离成功还有很长的路要走。我建议你暂停这个任务,并牢牢掌握这个主题。从这里开始:http://praxis-velthuis.de/rdc/articles/articles-cobjs.html