来自Pascal DLL/SO中的C 加载和调用功能

Loading and calling functions in C++ from pascal DLL/SO

本文关键字:加载 调用 功能 中的 Pascal DLL SO 来自      更新时间:2023-10-16

我有一个编译的库,我正在尝试从C 代码访问功能。大多数功能正常工作,但是我将参数传递给接受数组作为参数的函数时遇到了一些麻烦。

pascal函数标头定义为:

function MyFunc( const Name  : PAnsichar; 
                 const MyArr : array of single;
                 const ArrLength : Longint;
                 var output : single
                ): Longint;

i可以在使用Pascal加载功能并在库中调用功能时正确地使用此功能。注意:库是使用CDECL调用约定编译的。

但是,我在加载C 的功能方面遇到麻烦。

该功能定义为:

typedef long (*MyFunc)(char *, float, long, float *);

我能够正确加载DLL并正确地加速所有功能,除了上面的功能外,所有功能都可以。

long ArrLeng = 300;
float out;
float Arr[ArrLeng];
\ fill the array
result = MyFunc((char *) "default", Arr[0], ArrLeng, &out);

我可以将调试器附加到库中,并检查库读取的变量。奇怪的是,名称和arrleng变量已正确传递,但是数组未正确传递。

我在做什么错?我应该如何将数组传递到库?

尝试将指针传递给第一个元素。"单个数组"是一个所谓的开放阵列,它是一个pascal构造,也通过数组边界信息。

与cdecl afaik结合使用时,它将简化为指向elementType的指针。(单个 *(至少自由帕斯卡(Pascal(确实如此,我不知道delphi/kylix在

毫无疑问,让Pascal致电并检查结果组件。