来自Pascal DLL/SO中的C 加载和调用功能
Loading and calling functions in C++ from pascal DLL/SO
我有一个编译的库,我正在尝试从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致电并检查结果组件。
相关文章:
- 使用动态链接加载程序 <dlfcn.h> 而不是直接函数调用的目的是什么?
- 加载由 MATLAB Coder 生成的带有函数的 DLL,该函数调用外部函数
- Linux c++.在预加载的共享库中定义的基类的崩溃调用函数
- 从动态加载的 dll 内部调用C++函数
- 对外部函数的调用是否强制从内存加载
- 混合延迟 dll 加载和手动调用 LoadLibraryA 是否安全?
- 调用提取重加载器会产生对"运算符"的未定义引用错误>>
- 如何动态加载和调用具有特定于库的类型作为函数参数的符号
- QT 加载.dll不调用解析
- C++调用lua_dostring来加载具有"require('cjson')"的Lua Scrip引发错误:cjson.so:未定义的符号:lua_getfield
- 来自Pascal DLL/SO中的C 加载和调用功能
- 通过在C 中动态加载的LIB分配的基础级指针上调用删除的安全性
- 崩溃:分段故障:增强序列化加载 - 用null调用构造函数
- CoInitialize 尚未被调用 - (从 DirectXTK 加载 gamepad.h,无需库)
- 使用 C++ 和嵌入式单声道调用 C# DLL 时无法加载程序集系统
- C dll由于对未调用的不存在的函数的引用而未加载
- 如何修复C#应用程序中调用C++DLL函数时的上下文加载错误
- 加载cygwin C++dll,调用类函数
- 加载调用父类的 DLL 和子 dll
- 安全性:防止未经授权加载/调用C++DLL