python调用dll第二篇:编译dll文件

本篇主要讲两部分内容(最简单代码说明整个思路):

  1. 用eclipse+CRT编译适合Python调用的C/C++代码;
  2. 用eclipse+CRT+MinGW将代码编译成dll文件。

正文:

一 编写C++代码:

根据extern "C" {}是否在CPP中可以分如下三种情况:

(extern "C"{} 用法类似 ROBOT_LIBRARY_SCOPE = "GLOBAL",头文件类似:__init__.py。

extern "C" 详细解释清参考文章:https://www.cnblogs.com/rollenholt/archive/2012/03/20/2409046.html)

 

 

 

1.第一种情况:

extern "C" {}在CPP中(这个时候可以不用单独再建立头文件.h)代码如下:

原代码:

#include <stdio.h>

 

extern "C" {

    __declspec(dllexport) int Double(int x);

    __declspec(dllexport) float floatAdd(float a,float b);

    __declspec(dllexport) void HelloWorld(char * str);

    __declspec(dllexport) void Ints(int * arr,int n);

    __declspec(dllexport) char charout(char a);

}

 

int Double(int x){

    return x*2;

}

 

float floatAdd(float a,float b) {

    return a+b;

}

 

char charout(char a){

 

return a;

}

 

void HelloWorld(char * str){

    puts(str);

}

 

void Ints(int * arr,int n){

    for(int i=0;i<n;i++){

        printf("%d ",arr[i]);

    }

puts("");

2.第二种情况:

extern "C" {}还是在CPP中,只不过每个函数都加上extern "C" 代码如下:

原代码如下:

#include <stdio.h>

 

extern "C" __declspec(dllexport)  int Double(int x){

    return x*2;

}

 

extern "C" __declspec(dllexport) float floatAdd(float a,float b) {

    return a+b;

}

 

extern "C" __declspec(dllexport) char charout(char a){

 

return a;

}

 

extern "C" __declspec(dllexport) void HelloWorld(char * str){

    puts(str);

}

 

extern "C" __declspec(dllexport) void Ints(int * arr,int n){

    for(int i=0;i<n;i++){

        printf("%d ",arr[i]);

    }

    puts("");

 

}

3.第三种情况:

extern "C" {}不在CPP中,而是在头文件中, 代码如下:

头文件(.h)是和CPP在同一级目录下(一般都在src目录下),关于头文件创建:选中src目录→鼠标右键→New→Header file(注意:填写file名字时一定要加上后缀.h)

头文件代码如下:

.CPP文件代码如下:

二、编译成dll文件:

手动配置编译信息步骤如下:

1.选择项目,鼠标右键,选择Properties:

点击Properties,会出现下图界面:

重点是Tool Chain Editor 和 Settings:

2.Tool Chain Editor中一般信息都是默认如下,不用怎么变动,如下图:

  1. Settings配置有如下几个地方,按截图配置就行:

Number1:

Number2:

图中所需内容:-Wl,--add-stdcall-alias -static-libgcc -static-libstdc++ -shared

Number3:

Number4:

有些地方说什么创建dll文件名字会自动改变啥的,引用时候是要在前面多加lib的,其实就是这个地方多了一个前缀,网上一些文章是不明所以的瞎说!

Number5:

Number 6:

完成上面Number1~6,之后,点击OK

然后再点击“”按钮,进行编译,编译成功后如图:

最后,鼠标选中该dll文件,鼠标左键长按,就可以拖动该文件到我们需要放dll文件的地方!了

 

 

 

 

参考文章1:https://blog.csdn.net/csdncqmyg/article/details/53170548

参考文章2:https://blog.csdn.net/Jul_11th/article/details/78621178

参考文章3:https://www.cnblogs.com/timssd/p/6698968.html

 

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值