Windows下Python直接调用C++写的dll

码农公社  210.net.cn   210= 1024  10月24日一个重要的节日--码农(程序员)节

环境:Window 10,VS 2019, Python 2.7.12, 64bit  


1,打开 VS 2019,新建C++ Windows 动态链接库工程 Example,加入下列文件,如果Python是64位的则在VS中 Solution platforms 选择 x64 编译成64位的 DLL;  


Example.h


#pragma once

#ifndef CPP_EXPORTS
#define CPP_EXPORTS
#endif

#ifdef CPP_EXPORTS
#define CPP_API _declspec(dllexport)
#else 
#define CPP_API _declspec(dllimport)
#endif

#include <iostream>
using namespace std;

#ifdef __cplusplus
extern "C"
{
#endif

    CPP_API int __cdecl getInt();
    CPP_API const char* __cdecl getString();
    CPP_API void __cdecl setString(const char* str);

#ifdef __cplusplus
}
#endif


Example.cpp



#include "pch.h"
#include "Example.h"

CPP_API int __cdecl getInt()
{
    return 5;
}

CPP_API const char* __cdecl getString()
{
    return "hello";
}

CPP_API void __cdecl setString(const char* str)
{
    cout << str << endl;
}


编译,得到 Example.dll


2, 打开 Command,cd 到 Example.dll 所在目录,输入 Python2,进入python环境



>>> from ctypes import * 
>>> dll = CDLL("Example.dll") 
>>> print dll.getInt() 
5  

>>> getStr = dll.getString 
>>> getStr.restype = c_char_p 
>>> pChar = getStr() 
>>> print c_char_p(pChar).value 
hello  

>>> setStr = dll.setString 
>>> setStr.argtypes = [c_char_p] 
>>> pStr = create_string_buffer("hello") 
>>> setStr(pStr) 
hello 
-1043503984


源自https://www.cnblogs.com/gujf2016/p/11282352.html

评论