1. 使用C/C++编写DLL
VS创建一个Win32 Project
选择DLl,勾选Empty Project
新建test.h
#ifndef _TEST_H_
#define _TEST_H_
int sum(int, int)
int sub(int, int);
#endif
新建test.cpp
#define DLLEXPORT extern "C" __declspec(dllexport)
DLLEXPORT int sum(int a, int b) {
return a + b;
}
DLLEXPORT int sub(int a, int b) {
return a - b;
}
编译生成DLL即可。
2. 调用DLL
from ctypes import cdll
mydll = cdll.LoadLibrary("pydll.dll")
接下来就可以通过mydll直接调用pydll里的函数了:
In [11]: mydll.sum(1,2)
Out[11]: 3
In [12]: mydll.sub(1,2)
Out[12]: -1
3. 释放DLL
在使用完dll后需要释放dll,释放DLL的方法如下:
import win32api
win32api.FreeLibrary(mydll._handle)
4. 32位/64位兼容问题
VS工具建立工程时默认是建立Win32工程,如果python是64位的,这时在LoadLibrary时就会出错:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "D:\ProgramFiles\Python35\lib\ctypes\__init__.py", line 425, in LoadLibrary
return self._dlltype(name)
File "D:\ProgramFiles\Python35\lib\ctypes\__init__.py", line 347, in __init__
self._handle = _dlopen(self._name, mode)
OSError: [WinError 193] %1 不是有效的 Win32 应用程序。
解决办法是在Configuration Manager中添加一个X64的配置:
再编译生成dll即可。