国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁(yè) > news >正文

行唐縣做網(wǎng)站電話李勇seo的博客

行唐縣做網(wǎng)站電話,李勇seo的博客,破解版WordPress主題,2015做外貿(mào)網(wǎng)站好做嗎閑談 因?yàn)镼t封裝了很多個(gè)人感覺(jué)很好用的庫(kù),所以一直想通過(guò)CAPL去調(diào)用Qt實(shí)現(xiàn)一些功能,但是一直沒(méi)機(jī)會(huì)(網(wǎng)絡(luò)上也沒(méi)看到這方面的教程),這次自己用了兩天,踩了很多坑,終于是做成了一個(gè)初步的調(diào)用方…

閑談

因?yàn)镼t封裝了很多個(gè)人感覺(jué)很好用的庫(kù),所以一直想通過(guò)CAPL去調(diào)用Qt實(shí)現(xiàn)一些功能,但是一直沒(méi)機(jī)會(huì)(網(wǎng)絡(luò)上也沒(méi)看到這方面的教程),這次自己用了兩天,踩了很多坑,終于是做成了一個(gè)初步的調(diào)用方案,雖然有點(diǎn)麻煩,但是以后可能會(huì)讓自己提高很多的效率。
之前的方案是通過(guò)Qt制作面板,然后CAPL和Qt通過(guò)tcp/udp進(jìn)行通訊,實(shí)現(xiàn)了部分功能
現(xiàn)在是直接封裝成dll,不需要單獨(dú)打開(kāi)Qt程序的界面
廢話結(jié)束,進(jìn)入正題

制作Qt的DLL

可以參考這個(gè)博主的博客
https://www.cnblogs.com/susiesnai-sun/p/16872488.html

我的dll是解析HEX,BIN,S19文件的,雖然這個(gè)可以capl解決,但是為了復(fù)用,還是做了一個(gè)
如下圖
.pro
在這里插入圖片描述
.h在這里插入圖片描述
.cpp
在這里插入圖片描述
因?yàn)樯婕肮鞠嚓P(guān)的東西,.CPP不全,只當(dāng)作參考,但是過(guò)程很明顯

制作capl dll

打開(kāi)CANoe給定的制作dll的demo,下附制作的代碼,可以參考。在這里遇到一些問(wèn)題,生成的dll在CANoe調(diào)用的時(shí)候,總是加載庫(kù)函數(shù)失敗,通過(guò)自己新建c++項(xiàng)目發(fā)現(xiàn),因?yàn)槭莇ll調(diào)用dll,我猜是因?yàn)轫?xiàng)目的路徑有問(wèn)題,然后把對(duì)應(yīng)的dll全部放到項(xiàng)目路徑下才加載成功。切記。

HANDLE hThead;
uint16_t File_flag = 0;
char fileName[10000] = "";
typedef uint8_t(*BOOTFILERED)(char[], uint8_t*, uint64_t&); // 定義函數(shù)指針類(lèi)型
HMODULE hLib = NULL;
uint8_t fileData[10000000];
uint64_t fileDataLength = 0;DWORD _stdcall readFileThread(LPVOID p)
{if (File_flag == 1){BOOTFILERED readS19;// 導(dǎo)出函數(shù)地址readS19 = (BOOTFILERED)GetProcAddress(hLib, "readS19");readS19(fileName, fileData, fileDataLength);}else if (File_flag == 2){BOOTFILERED readHex;// 導(dǎo)出函數(shù)地址readHex = (BOOTFILERED)GetProcAddress(hLib, "readHex");readHex(fileName, fileData, fileDataLength);}else if (File_flag == 2){BOOTFILERED readBin;// 導(dǎo)出函數(shù)地址readBin = (BOOTFILERED)GetProcAddress(hLib, "readBin");readBin(fileName, fileData, fileDataLength);}else {return 4;}return 0;
}uint64_t CAPLEXPORT CAPLPASCAL readFile(char file[], uint16_t flag)
{if (hLib == NULL)//檢測(cè)是否加載dll成功{hLib = LoadLibrary("bootloadReadFile.dll");if (hLib == NULL)//檢測(cè)是否加載dll成功{printf("加載DLLTest1.dll動(dòng)態(tài)庫(kù)失敗\n");return 1;}}strncpy(fileName, file, strlen(file));File_flag = flag;DWORD dwThreadID;hThead = CreateThread(NULL, 0, readFileThread, 0, 0, &dwThreadID);return 0;}uint64_t CAPLEXPORT CAPLPASCAL getData(uint8_t *data)
{for (uint64_t i = 0; i < fileDataLength; i++){data[i] = fileData[i];}return fileDataLength;
}// ============================================================================
// CAPL_DLL_INFO_LIST : list of exported functions
//   The first field is predefined and mustn't be changed!
//   The list has to end with a {0,0} entry!
// New struct supporting function names with up to 50 characters
// ============================================================================
CAPL_DLL_INFO4 table[] = {
{CDLL_VERSION_NAME, (CAPL_FARCALL)CDLL_VERSION, "", "", CAPL_DLL_CDECL, 0xabcd, CDLL_EXPORT },{"bootloadReadFile",            (CAPL_FARCALL)readFile,          "BootloadFile","flag:1,s19;2,hex;3,bin",'U', 2, "CL", "\001\000", {"fileName","flag"}},{"bootloadGetData",            (CAPL_FARCALL)getData,          "BootloadFile","Suggested array length is 100000000",'U', 1, "B", "\001", {"fileData"}},
{0, 0}
};

在這里插入圖片描述

CAPL調(diào)用dll

如上一條所說(shuō),dll調(diào)用dll可能會(huì)出現(xiàn)問(wèn)題,需要先把需要的dll加載進(jìn)去
通過(guò)下圖CANoe這里有一個(gè)介紹
在這里插入圖片描述
1:我選擇了第一條方案,我的路徑是“C:\Program Files\Vector CANoe 15\Exec32”,僅作參考。
對(duì)應(yīng)的dll獲取方式,自己寫(xiě)一個(gè)Qt窗口工程,然后選擇32位的mingw的Release生成.exe文件。將此EXE文件復(fù)制粘貼到一個(gè)單獨(dú)空白的文件夾里面,通過(guò)下圖打開(kāi)cmd窗口,進(jìn)入到建立的目錄下,執(zhí)行windeployqt +“文件名”,獲取庫(kù)函數(shù),然后把.exe刪掉就可以了。看下下圖

在這里插入圖片描述
在這里插入圖片描述
2:將上面生成的dll,復(fù)制粘貼到路徑(C:\Program Files\Vector CANoe 15\Exec32 這個(gè)是我的,具體看自己)

CANoe實(shí)現(xiàn)

/*@!Encoding:936*/
includes
{#pragma library("capldll.dll")}variables
{}testcase readHEX()
{byte hahha[10000000];int i=0;qword testdd=0;write("哈哈哈  %d", bootloadReadFile("C:\\Users\\xiaoshuai\\Desktop\\test\\ED_C001_04_R2_CL_SV1.2_20221019.hex",2));testWaitForTimeout(1000);// bootloadGetData(hahha,testdd);write("當(dāng)前數(shù)據(jù) %I64u",testdd=bootloadGetData(hahha));for(i=0;i<testdd;i=i+16){write("%d  %02x",i/16,hahha[i]);}}void MainTest ()
{readHEX();
}

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

視頻演示

之后加

總結(jié)

以上說(shuō)明完成,記住幾個(gè)踩坑點(diǎn)
1:vs2019中dll和sln放在同一個(gè)路徑
2:CANoe的數(shù)字不能用指針
3:CANoe記得放入DLL
可能有些是沒(méi)用的,可以自己嘗試

http://m.aloenet.com.cn/news/1611.html

相關(guān)文章:

  • 邯鄲網(wǎng)站建設(shè)多少錢(qián)杭州seo澤成
  • 做服裝搭配圖的網(wǎng)站網(wǎng)站建設(shè)技術(shù)
  • 南昌專(zhuān)業(yè)網(wǎng)站建設(shè)百度熱搜廣告設(shè)計(jì)公司
  • 網(wǎng)站縮放代碼專(zhuān)業(yè)網(wǎng)站優(yōu)化推廣
  • 網(wǎng)站建設(shè)手機(jī)版模板愛(ài)站網(wǎng)關(guān)鍵詞查詢(xún)網(wǎng)站
  • 網(wǎng)站如何做404頁(yè)面湖南企業(yè)seo優(yōu)化報(bào)價(jià)
  • 廣州網(wǎng)站建設(shè)哪里買(mǎi)四平網(wǎng)絡(luò)推廣
  • 怎么做觸屏版網(wǎng)站關(guān)鍵詞優(yōu)化是什么意思
  • 網(wǎng)站優(yōu)化 前端怎么做營(yíng)銷(xiāo)模式100個(gè)經(jīng)典案例
  • 用asp做網(wǎng)站span友情鏈接大全
  • 音頻網(wǎng)站開(kāi)發(fā)湖南營(yíng)銷(xiāo)型網(wǎng)站建設(shè)
  • 閑魚(yú)網(wǎng)站建設(shè)費(fèi)用核心關(guān)鍵詞是什么意思
  • 海南網(wǎng)站建設(shè)推廣線上營(yíng)銷(xiāo)渠道有哪些
  • 嘉興網(wǎng)站系統(tǒng)總部外鏈工廠
  • web 網(wǎng)站做甘特圖教育機(jī)構(gòu)排名
  • 自己做國(guó)際網(wǎng)站網(wǎng)絡(luò)營(yíng)銷(xiāo)管理
  • 有沒(méi)有靠譜的推廣平臺(tái)手機(jī)優(yōu)化軟件哪個(gè)好用
  • 怎么用ps做網(wǎng)站圖片nba排名西部和東部
  • 做網(wǎng)站搜索如何顯示官網(wǎng)高端網(wǎng)站定制開(kāi)發(fā)
  • 蘭州網(wǎng)站建設(shè) 冰雨品牌推廣的具體方法
  • 站長(zhǎng)平臺(tái)百度百度直播
  • 新手學(xué)做網(wǎng)站pdf手競(jìng)價(jià)網(wǎng)官網(wǎng)
  • 網(wǎng)頁(yè)設(shè)計(jì)專(zhuān)業(yè)大學(xué)排名網(wǎng)站seo最新優(yōu)化方法
  • 網(wǎng)站選擇理由描述百度seo排名原理
  • 秦皇島網(wǎng)站建設(shè)哪家好天津做優(yōu)化好的公司
  • 博羅做網(wǎng)站報(bào)價(jià)軟文模板
  • 舞鋼市做網(wǎng)站開(kāi)發(fā)的公司網(wǎng)絡(luò)營(yíng)銷(xiāo)的目的是
  • 網(wǎng)站建設(shè)字圖search搜索引擎
  • 武漢手游網(wǎng)站開(kāi)發(fā)推廣賺錢(qián)項(xiàng)目
  • 成都個(gè)人網(wǎng)站seo企業(yè)建站系統(tǒng)