mingw如何制作动态库附python调用

1.mingw和msvc

bash 复制代码
g++ -fpic HelloWorld.cpp -shared -o test.dll

g++ -L . -ltest .\test.cpp

注意-L后面的.挨不挨着都行,-l不需要-ltest.dll,只需要-ltest

2.dll.cpp

复制代码
extern "C" {
	__declspec(dllexport) int __stdcall add(int a, int b) {
		return a + b;
	}
}

3.dll.h

复制代码
extern "C" {
	__declspec(dllexport) int __stdcall add(int a, int b);
}

4.test.c:必须要**#include "./HelloWorld.h",python则不需要**

复制代码
#include <stdio.h>
#include "./HelloWorld.h"

extern int add(int a, int b);

int main(){
    printf("\n[%d]\n", add(12, 5));
    return 0;
}

5.python:main.py:经常找不到库,如何解决

1)绝对路径

2)os.add_dll_directory包含库的搜索路径

3)3.8以上版本,还是找不到就需要加上winmode=0

bash 复制代码
import ctypes  
import os
  
a = ctypes.WinDLL( 'test.dll' , winmode=0).add(12, 5)
print(a)

os.add_dll_directory("D:\\code\\thirdparty\\Chess\\cpp")
a = ctypes.WinDLL("test.dll").add(12, 5)
print(a)

6.python如果是cdecl就用CDLL()函数

相关推荐
Siren_dream5 小时前
python进阶_Day8
开发语言·python
蓝天智能6 小时前
QT QML交互原理:信号与槽机制
开发语言·qt·交互
十五年专注C++开发6 小时前
C++类型转换通用接口设计实现
开发语言·c++·跨平台·类设计
im_AMBER6 小时前
杂记 15
java·开发语言·算法
Zzz 小生6 小时前
编程基础学习(一)-Python基础语法+数据结构+面向对象全解析
开发语言·python
沐知全栈开发6 小时前
Bootstrap4 表格详解
开发语言
CryptoRzz7 小时前
欧美(美股、加拿大股票、墨西哥股票)股票数据接口文档
java·服务器·开发语言·数据库·区块链
wulitoud7 小时前
[好用工具] 一款mac/windows电脑历史剪切板工具,类似著名的Paste
windows·macos·sublime text
Never_Satisfied7 小时前
在JavaScript / HTML中,div容器在内容过多时不显示超出的部分
开发语言·javascript·html
APItesterCris7 小时前
构建弹性数据管道:利用淘宝商品 API 进行流式数据采集与处理
linux·数据库·windows