-
C/C++文件
- 头文件
test.h
#ifndef _TEST_H_ #define _TEST_H_ int sum(int, int); #endif
- C代码
test.c
__declspec(dllexport) int sum(int a, int b) { return a + b; }
- C++ 代码
test.cpp
如果使用Windows操作系统来开发,需要使用#define DLLEXPORT extern "C" __declspec(dllexport) DLLEXPORT int sum(int a, int b) { return a + b; }
__declspec(dllexport)
的声明来说明这个函数是导出的;如果使用Linux操作系统,则这个声明省略。
extern "C"声明避免编译器对函数名称进行name mangling,这对于使用C++来编写DLL/SO是必须的。
为了提高可读性和可复用性,强烈建议使用#define来定义一个导出类型的宏,正如上面的test.cpp代码所示。
- 头文件
-
编译程序并生成DLL/SO
如果使用Windows操作系统,并安装了Visual Studio的IDE,则可以创建一个新的Win32项目,并指定为DLL类型的空项目,然后将上面新建的两个源文件包含进去。最后编译生成一个DLL,输出为test.dll。
如果使用Linux操作系统,使用以下命令来生成.so:
gcc -fPIC -c test.c
gcc -shared -o test.so test.o
-
使用ctypes来加载DLL/SO
from ctypes import cdll mydll = cdll.LoadLibrary('test.dll') print(mydll) print(mydll.sum(1, 4))
-
可使用dumpbin工具来查看依赖和位数
网友评论