Python和C++是一对好基友,他们之间的如何通信的呢?
1.首先编写一个C++的DLL
工具:VS2013+Win8_x64
#pragma once
class CallMath {
public:
CallMath();
~CallMath();
void printStr();
};
#include "CallMath.h"
#include <iostream>
using namespace std;
CallMath::CallMath() {
}
CallMath::~CallMath() {
}
void CallMath::printStr() {
cout << "Hello I am come from C++ World!";
}
这个类中只有一个成员函数,就是打印串字符串来。
由于Python只能调用C语言函数,所以还有把编写的类封装成C函数模式:
#include "CallMath.h"
#define PYAPI _declspec(dllexport)
extern "C"{
PYAPI void printStr( );
PYAPI int add( int a, int b );
}
#include "PyInterface.h"
void printStr() {
CallMath callM;
callM.printStr();
}
int add( int a, int b ) {
return a + b;
}
然后编译生成一个DLL,把DLL拷到py同一个目录下。
2.编写Python程序
工具PyCharm:Python 版本:2.7.14 + 64位
import ctypes
dll = ctypes.cdll.LoadLibrary('./pyDLL.dll')
print dll.add(2,3)
dll.printStr()
Python运行报错:
Traceback (most recent call last):
File "F:/800_Python/Test.py", line 3, in <module>
dll = ctypes.cdll.LoadLibrary('./pyDLL.dll')
File "D:\Program Files\Python27\Lib\ctypes\__init__.py", line 444, in LoadLibrary
return self._dlltype(name)
File "D:\Program Files\Python27\Lib\ctypes\__init__.py", line 366, in __init__
self._handle = _dlopen(self._name, mode)
WindowsError: [Error 193] %1 �������� Win32
原来这是由于编译的DLL版本是32位的,但是Python的版本是64位的。于是就有了两种解决方案:
一、把DLL编译成64位
二、使用Python版本32位的
采用第一种方案:
重新设置一下编译版本:
重新选择64位编译:
然后再把生成的DLL复制到py同一个目录下面,
运行Py
输出正确的内容。以上!