python调用C++编写的DLL
来源:互联网 发布:elton john 知乎 编辑:程序博客网 时间:2024/06/13 19:57
一、编写C++的DLL
1、新建test.cpp文件,并输入以下内容:
// 这是主 DLL 文件。
// test.cpp
#define DLLEXPORT extern "C" __declspec(dllexport)
DLLEXPORT int __stdcall sum(int a, int b) {
return a + b;
}
如果使用Windows操作系统来开发,需要使用__declspec(dllexport)
的声明来说明这个函数是导出的;如果使用Linux操作系统,则这个声明省略。extern "C"
声明避免编译器对函数名称进行name mangling,这对于使用C++来编写DLL/SO是必须的。
为了提高可读性和可复用性,强烈建议使用#define
来定义一个导出类型的宏,正如上面的test.cpp代码所示。
在 int __stdcall sum 中“__stdcall”一定不要忘了啊。
2、新建一个头文件(但不是必须的)
//test.h
#pragma once
int sum(int, int);
记得加上“#pragma once”
3、编译程序并生成DLL
则可以创建一个新的Win32项目,并指定为DLL类型的空项目,然后将上面新建的两个源文件包含进去。最后编译生成一个DLL,输出为test.dll。
二、python调用DLL
1、将DLL放到python文件的同目录下。
2、在python中编写如下代码进行测试
import ctypes
import os
CUR_PATH=os.path.dirname(__file__)
dllPath=os.path.join(CUR_PATH,"DllTest.dll")
print dllPath
#mydll=ctypes.cdll.LoadLibrary(dllPath)
#print mydll
pDll=ctypes.WinDLL(dllPath)
print pDll
pResutl= pDll.sum(1,4)
print pResutl
3、运行脚本,结果如下:
D:/pythonWorkSpace/latlonToImg\DllTest.dll
<WinDLL 'D:/pythonWorkSpace/latlonToImg\DllTest.dll', handle 6d8e0000 at 2446090>
三、思考
为什么我用mydll=ctypes.cdll.LoadLibrary(dllPath)不成功,而用pDll=ctypes.WinDLL(dllPath)则可以成功。
四、参考文献
http://wolfprojects.altervista.org/articles/dll-in-c-for-python/
- python调用C++编写的DLL
- 调用C语言编写的DLL文件
- 编写C#调用的C++DLL
- 编写C#调用的C++DLL
- JAVA JNI调用C编写的dll
- 编写C#调用的C++DLL
- c调用c++编的dll,c++调用c编写的dll,extern “C”的用法
- python 调用c写的dll/so
- 在Delphi中调用C语言编写的DLL
- C#中如何调用C++编写的DLL
- C#中如何调用C++编写的DLL
- c#.net下成功调用c++编写的标准dll
- 在C#中调用C++Builder编写的DLL
- C#中如何调用C++编写的DLL
- C#中如何调用C++编写的DLL
- C#+.NET中调用VB编写的DLL代码事例
- C#调用C语言编写的dll示例
- C#调用非托管C编写DLL的数据类型转换
- Zigbee网关作为tcpclient示意图
- Android 自定义控件之 继承布局文件
- spring ioc原理(看完后大家可以自己写一个spring)
- 存储过程三个例子
- Unity3D研究院之深入理解Unity脚本的执行顺序(六十二)
- python调用C++编写的DLL
- Ubuntu 12.04 64bit安装flashcache
- css3手风琴效果diy
- (java)leetcode Valid Anagram
- java 利用ManagementFactory获取jvm,os的一些信息
- Spring AOP 实现原理
- 悄然潜行的百度快照
- easyui的树表格使用总结
- select函数详解