亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python調用vs2015生成的dll文件

系統(tǒng) 2048 0

?

? ? ? ?目前工作中,Python用的最多,但是很多數(shù)學計算在Python中運行,速度會很慢,而Python本身就是基于C開發(fā)的,而且它的很多第三方模塊也是,所以Python對于C接口是支持的,所以在此記錄一下,Python調用C接口的過程。在網(wǎng)上看了很多教程,都只有Python調用dll的code,對于dll的如何生成只字不提,或者是基于linux的.so文件。在單獨搜索dll如何生成后,我按照以下的code生成了dll:

.cpp文件

            
              #define EXPORT_MY_DLL

#include 
              
                
#include "sample.h"
using namespace std;

int gcd(int x, int y)
{
	int g = y;
	while (x > 0)
	{
		g = x;
		x = y % x;
		y = g;
	}
	return g;
}
              
            
          

.h文件

            
              __declspec(dllexport) int gcd(int , int );
            
          

網(wǎng)上很多生成dll的教程,就像上述code一樣,這樣生成的dll,c/c++程序調用是沒有什么問題的,但是如果是Python調用就會出現(xiàn)如下的錯誤。

Python調用dll的code

            
              import ctypes

x = ctypes.c_int(10)
y = ctypes.c_int(50)


dll = ctypes.WinDLL('sample.dll')
result = dll.gcd(x,y)
print(result)
            
          

會出現(xiàn)錯誤提示

Python調用vs2015生成的dll文件_第1張圖片

會發(fā)現(xiàn)在dll中定義的函數(shù)找不到,雖然dll可以正常導入,我定義的函數(shù)名稱叫gcd(),實現(xiàn)了兩數(shù)求最大公約數(shù)的功能。如果,我們用下面的code,生成dll,同樣的python調用code,是可以成功調用的,這份代碼參考博客地址為:

https://blog.csdn.net/qq_28726333/article/details/80040239

.cpp文件

            
              #define EXPORT_MY_DLL

#include 
              
                
#include "sample.h"
using namespace std;

MY_API int gcd(int x, int y)
{
	int g = y;
	while (x > 0)
	{
		g = x;
		x = y % x;
		y = g;
	}
	return g;
}
              
            
          

.h文件

            
              #ifdef EXPORT_MY_DLL 
#define MY_API __declspec(dllexport)
#else 
#define MY_API __declspec(dllimport) 
#endif 
extern "C"
{
	MY_API int gcd(int , int );
}
            
          

Python調用執(zhí)行結果

Python調用vs2015生成的dll文件_第2張圖片

我Python版本是3.6.5,我不確定是Python版本的關系,還是生成dll方式的關系,我只在以上生成dll的code上實現(xiàn)了Python調用dll文件的功能。而在實際更改code的過程中,extern “c”在dll的生成中,是必須加進去的,所以我的一個猜想是:Python對C的接口更支持,我用下面那個鏈接也試了一下,主要還是在extern “C”這,雖然下面這篇博客的評論有說我在上面提到的那個問題,即“function not found”,但是我實際測試了一下,完全沒有,Python可以正常調用。

https://blog.csdn.net/weixin_38285131/article/details/81288338

知乎這篇文章驗證了我的猜想,ctypes這個Python庫確實對c++支持不是很好

https://zhuanlan.zhihu.com/p/20152309


更多文章、技術交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。。?/p>

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲精品无人区一区二区三区 | 性生活免费网站 | 久操香蕉 | 日日夜夜伊人 | 一级毛片免费不卡 | 视频一区二区在线 | 免费在线黄色网 | 久久大香伊蕉在人线国产昨爱 | 国产成人99久久亚洲综合精品 | 欧美金八天国 | 国产在线美女 | 91亚洲欧美 | 国产成人在线视频 | 色www国产阿娇 | 2019精品国产品免费观看 | 香蕉国产精品 | 国产特级毛片 | 欧美一区二区三区影院 | 日本欧美成 | 国产高清一区二区 | 欧美综合精品一区二区三区 | 久久亚洲精品专区蓝色区 | 夜夜操狠狠操 | 老年人一级特黄aa大片 | 天天视频免费入口 | 色婷婷狠狠五月综合天色拍 | 奇米第 | 国产一极毛片 | 8x在线永久成人影院 | 奇米免费视频 | 国产精品不卡在线 | 美女在线视频观看影院免费天天看 | 国产成人亚洲精品2020 | 成人美女免费网站视频 | aaa级毛片| 欧美四虎影院 | 免费欧洲毛片a级视频老妇女 | 女胁师~牝奴隷调教 | 国产在线欧美精品中文一区 | 久久久www成人免费精品 | 亚洲视频在线免费看 |