如何链接.lib(静态链接库)文件至python环境中使用(借助.dll和ctypes库文件)

如何链接.lib文件至python环境中使用

导师项目中需要用到C++/python的混合编程,我最近苦恼于.lib文件与.dll文件至python环境中的调用,在网上搜索也没有直接有效的解决方法;

解决思路:在.dll文件能被python调用的基础上,链接.lib(静态链接库)文件到.dll(动态链接库)中,再经过ctypes调用.dll文件,这样就可以实现预期结果

实验环境:(windows64位+VS2017+python3.6.8+pycharm)

1 实现.lib文件到.dll文件的调用(类似于C++控制台程序调用.lib文件)

参考网友的博客C++控制台程序调用.lib文件,调用.lib文件.

//testLib.cpp文件
#include"testLib.h"

double calcdang::plusdang(double a, double b) { return a + b; }
double calcdang::multdang(double a, double b) { return a * b; }
double calcdang::subdang(double a, double b) { return a - b; }
//testLib.h文件
#pragma once
class calcdang {
public:
	double plusdang(double a, double b);
	double multdang(double a, double b);
	double subdang(double a, double b);
};

生成test_libForCPP.lib文件,注意程序的调试环境(X86? X64?),这个很重要奥...

现在就来生成.dll文件:

//.ctypesdll.cpp文件
//extern "C" C++中编译c格式的函数,如果利用c语言编译不需要
//__declspec(dllexport)  导出到库中(win系统环境下.dll文件链接宏)
#include <stdio.h>
#include "testLib.h"       //.lib文件的头文件
#include <iostream>

using namespace std;

extern "C" __declspec(dllexport) void TestCtypes() 
{
	printf("In C testCtypes\n");	

    //调用.lib文件中的函数
	calcdang datatest1;
	cout.flags(ios::fixed);
	cout.precision(2);//设置输出精度
	cout << "2.11*6.22 = " << datatest1.multdang(2.11, 6.22) << endl;
	cout << "2.11-6.22 = " << datatest1.subdang(2.11, 6.22) << endl;
	cout << "2.11+6.22 = " << datatest1.plusdang(2.11, 6.22) << endl;

	system("pause");
}

在项目的属性->VC++目录-->包含目录中添加testLib.h文件目录

在项目的属性->VC++目录-->包含目录中添加test_libForCPP.lib文件目录

在附加依赖库中添加.lib文件的全称,注意文件名称的准确性!

至此,可生成CtypesTest.dll动态链接库文件

2 在python环境下调用CtypesTest.dll文件

希望帮到更多朋友,本人菜鸟一只.

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值