目录
dll
--目前自己测试发现vs2015企业版使用DLL功能。vs2015.ent_chs.iso
而且在实际测试中没有发现需要各种vc runtime dll。
参考网页: https://blog.csdn.net/liguangxilgx/article/details/80552378
vs2015生成/调用DLL
DLL export/import 导入导出定义
// 下列 ifdef 块是创建使从 DLL 导出更简单的 // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 MYDLL_EXPORTS // 符号编译的。在使用此 DLL 的 // 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将 // MYDLL_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的 // 符号视为是被导出的。 #ifdef MYDLL_EXPORTS #define MYDLL_API __declspec(dllexport) #else #define MYDLL_API __declspec(dllimport) #endif // 此类是从 MyDLL.dll 导出的 class MYDLL_API CMyDLL { public: CMyDLL(void); // TODO: 在此添加您的方法。 }; extern MYDLL_API int nMyDLL; // 说明,如果想与python接口,必须要定义extern "C",因为python只有与C的接口,没有cpp的接口。 extern "C" MYDLL_API int fnMyDLL(void); extern "C" MYDLL_API int ft_init(); extern "C" MYDLL_API void ft_close();
注意事项
vs使用时有debug/release & win32/x64的区别。
比如使用release x64生成了一个DLL文件,那么这个文件只能用于release x64配置调用该DLL文件,其它情况以此类推。
python调用DLL
Python: ctypes CDLL 和 WinDLL区别
原创WMSmile 最后发布于2019-09-16 15:34:17 阅读数 1037 收藏 展开 ctypes提供了两个LibraryLoader:CDLL和WinDLL。 CDLL支持cdecl,WinDLL支持stdcall(仅限Windows)。 根据您在C库中使用的调用约定,您必须在Python中使用正确的LibraryLoader。 ———————————————— 版权声明:本文为CSDN博主「WMSmile」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/wm9028/article/details/100889345
调用not found问题
Python调用c++写的dll,出现function “add”not found错误
出现问题的原因:
在函数声明上没有使用 extern “C”__declspec(dllexport) 也就是你定义的FILE_RW_DLL_API 如果不做这样的声明,函数就按照c++的方式进行编译,在python中不能访问,但在c++中可以访问。