C++下如何將TensorFlow模型封裝成DLL供C#調(diào)用
生成dll
IDE使用visual studio 2015。
首先新建一個(gè)C++win32工程,選擇dll,包括導(dǎo)出符號(hào),但不要預(yù)編譯頭。
模板會(huì)提供一個(gè)工程同名的頭文件和一個(gè)源文件。
在源文件中將TensorFlow頭文件和其他需要使用的頭文件引用進(jìn)來(lái)。
在源文件中定義需要export的函數(shù)。
在頭文件中給出需導(dǎo)出函數(shù)的聲明。
extern 關(guān)鍵字后加“C”保證在C#調(diào)用時(shí)不生成中間函數(shù)名。
編譯環(huán)境選擇X64,配置好include、lib目錄以及附加依賴項(xiàng)文件,生成解決方案。
在輸出目錄會(huì)看見(jiàn)生成了dll文件。
使用C#調(diào)用dll
new project,創(chuàng)建一個(gè)C#控制臺(tái)程序進(jìn)行測(cè)試,將C#工程添加到當(dāng)前solution中,右鍵設(shè)為工程第一啟動(dòng)項(xiàng)。打開(kāi)C#工程屬性,將build選項(xiàng)中的平臺(tái)設(shè)置為x64(很關(guān)鍵)
在C#的cs文件中首先include 頭文件system.runtime.interopservices。將dll工程的輸出目錄設(shè)置為C#的debug目錄,與EXE文件同級(jí)。
重新生成解決方案,此時(shí)生成的tfdll.dll會(huì)出現(xiàn)在C#的debug目錄下。
使用DllImport導(dǎo)入dll文件,如下圖所示代碼即可調(diào)用dll中的函數(shù)。
若出現(xiàn)badimage報(bào)錯(cuò),試圖加載不正確的dll,可能是由于位數(shù)選擇出錯(cuò),dll和C#沖突。
若出現(xiàn)找不到dll報(bào)錯(cuò),可能是由于未將此dll所需的依賴dll一同拷入debug文件夾下。
下圖中的TensorFlow的dll即是tfdll的依賴庫(kù)。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
C++標(biāo)準(zhǔn)模板庫(kù)map的常用操作
今天小編就為大家分享一篇關(guān)于C++標(biāo)準(zhǔn)模板庫(kù)map的常用操作,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-12-12C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的五子棋小游戲
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的五子棋小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05C++控制臺(tái)實(shí)現(xiàn)俄羅斯方塊游戲
這篇文章主要為大家詳細(xì)介紹了C++控制臺(tái)實(shí)現(xiàn)俄羅斯方塊游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06C語(yǔ)言中QString與QByteArray互相轉(zhuǎn)換的方法
本文主要介紹了C語(yǔ)言中QString與QByteArray互相轉(zhuǎn)換的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05C語(yǔ)言簡(jiǎn)單實(shí)現(xiàn)快速排序
快速排序是一種不穩(wěn)定排序,這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言簡(jiǎn)單實(shí)現(xiàn)快速排序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01