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/

 

1 0
原创粉丝点击