我从这里得到了一些代码:https://github.com/Esri/file-geodatabase-api,我想阻止c ++名称修改,所以我可以在Python中使用ctypes来调用这个DLL。
有没有办法在编译器级别全局应用extern“C”? 有没有办法轻松将它应用到代码中的.h文件?
谢谢
(PS我不是c ++开发人员,所以请原谅缺乏适当的术语)
答案 0 :(得分:3)
查看代码,您的问题没有简单的解决方案。该包没有已发布的C绑定,只有C ++。
你不能只是将事物包装在全局extern "C"
中来创建一个C绑定,类型和API都是面向C ++的,并且DLL无论如何都会破坏C ++符号。
您没有源代码库,但您可以使用C可调用函数创建一个单独的库,该函数又调用原始DLL的C ++ API。至少可以说,这是非平凡的工作!
如果您的目标是获取ESRI File GeoDatabase API的Python绑定,您可以查看以下页面:
http://libjoe.blogspot.fr/2014/02/python-wrapper-for-esri-file.html
https://code.google.com/archive/p/file-geodatabase-api-python-wrapper/
https://gis.stackexchange.com/questions/64864/gdal-python-bindings-and-file-geodatabase-api
答案 1 :(得分:1)
在C ++文件中执行以下操作,这样您就不必更改headerfile.h
:
extern "C" {
#include <headerfile.h>
}
答案 2 :(得分:0)
我会使用库接口函数创建一个新的头文件,因为不同的OS需要不同的函数导出属性:
extern "C" {
int __attribute__ (dllexport) ReturnSameValue(int avalue) // Linux
{
return avalue
}
int __declspec(dllexport) IncreseInteger(int avalue) // Windows dll
{
return avalue+1;
}
}