在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

英創信息技術WinCE設備動態鏈接庫的制作與調用

英創信息技術 ? 來源:英創信息技術 ? 作者:英創信息技術 ? 2020-01-15 14:33 ? 次閱讀

在使用英創ARM9系列主板做開發時,用戶可能希望將自己一部分代碼封裝起來,隱藏代碼的實現過程,只提供接口供其他程序調用。使用動態鏈接庫(Dynamic Link Library)可以很好實現這個要求。本文將介紹如何使用VS2005制作WINCE下設備使用的動態鏈接庫,以及動態鏈接庫的使用和調試方法。

1、制作動態鏈接庫

通過向導創建動態鏈接庫的工程。

1、新建工程,選擇C語言->智能設備->Win32智能設備工程,并填入自己工程的名字,這里為hellodll,點擊OK按鈕。

在平臺選項欄中,選擇動態鏈接庫對應的開發平臺,這里選擇為EM9170。

在工程選項中,選擇工程的類型為dll動態鏈接庫,這里可以勾選Export symbols選項,新建工程會帶有一些示例代碼。

打開頭文件hellodll.h,可以發現工程向導已經自動添加了一個類,變量和一個方法的例子了。

// This class is exported from the hellodll.dll
class HELLODLL_API Chellodll {
public:
Chellodll(void);
// TODO: add your methods here.
};
extern HELLODLL_API int nhellodll;
HELLODLL_API int fnhellodll(void);

2、添加自定義的方法,這里添加一個名為login的登錄函數。

// HELLODLL_API BOOL login(LPCWSTR user,LPCWSTR pass);
extern 'C' HELLODLL_API BOOL login(LPCWSTR user,LPCWSTR pass);

注意:這里使用了extern 'C',應為希望編譯器以C的方式編譯,因為C里面沒有函數重載,所以函數的名稱不會更改,即DLL入口名稱依然為login,如果以C++的方式編譯,編譯器會給函數前后加上返回類型和參數類型的符號,入口名稱會變化為類似?login@@YAHPB_W0@Z這樣的名稱,調用起來會麻煩一些。使用vs2005自帶的depends.exe工具可以查看dll的信息。

3、在hellodll.cpp中編寫他的實現代碼。

HELLODLL_API BOOL login(LPCWSTR user,LPCWSTR pass)
{
if (wcsicmp(user,L'admin')==0)
{
MessageBox(NULL,user,L'user',MB_OK);
}
if (wcsicmp(pass,L'admin')==0)
{
MessageBox(NULL,pass,L'pass',MB_OK);
}
return (wcsicmp(user,L'admin')==0) && (wcsicmp(pass,L'admin')==0);
}

如果用戶名和密碼都是admin,那么會彈出消息框并返回TRUE。

4、編譯工程,工程目錄下會生成相應的dll和lib文件,這里生成的為hellodll.dll和hellodll.lib。

2、C程序調用方法

新建C工程,調用之前制作的動態鏈接庫,測試是否成功。這里創建的是一個win32的命令行程序test_dll,在C里調用dll,有兩種方法可以使用。

靜態調用

靜態調用簡單方便。

1、把動態鏈接庫工程的hellodll.h文件和hellodll.lib文件拷貝到測試工程的工程目錄下。

2、將動態鏈接庫的頭文件hellodll.h文件,添加到工程中。

3、在工程的鏈接選項中,添加hellodll.lib。

4、這樣,引入頭文件,即可直接調用該動態鏈接庫的方法了,完整代碼如下。

#include 'stdafx.h'
#include
#include
#include 'hellodll.h'
int _tmain(int argc, _TCHAR* argv[])
{
BOOL b;
b = login(L'admin',L'admin');
// 返回TRUE
return 0;
}

動態調用

動態調用更加靈活,可以判斷dll的加載狀況,從而做出相應處理。

1、使用LoadLibrary加載動態鏈接庫。

HINSTANCE hModule = LoadLibrary(L'hellodll.dll');

2、使用GetProcAddress函數來獲得動態鏈接庫方法的函數指針。

typedef BOOL (CALLBACK *pLogin)(LPCWSTR, LPCWSTR);
pLogin pFun = (pLogin)GetProcAddress(hModule, L'login');

3、使用完畢后,用FreeLibrary卸載動態鏈接庫。

FreeLibrary(hModule);

完整代碼如下。

#include 'stdafx.h'
#include
#include
#include 'hellodll.h'
typedef BOOL (CALLBACK *pLogin)(LPCWSTR, LPCWSTR);
int _tmain(int argc, _TCHAR* argv[])
{
HINSTANCE hModule = LoadLibrary(L'hellodll.dll');
if(hModule == NULL)
{
MessageBox(NULL, L'加載dll失敗', L'test_dll', MB_OK);
return 0;
}
pLogin pFun = (pLogin)GetProcAddress(hModule, L'login');
if (pFun == NULL)
{
MessageBox(NULL, L'獲取login函數失敗', L'test_dll', MB_OK);
return 0;
}
BOOL b;
b = pFun(L'admin',L'admin');
// 返回TRUE
FreeLibrary(hModule);
return 0;
}

3、C#程序調用方法

新建一個C#工程,將dll添加進工程。

添加引用。

using System.Runtime.InteropServices;

定義好相應的接口,注意將參數設置正確。

[DllImport('hellodll.dll', EntryPoint = 'login', SetLastError = true, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Winapi)]
public static extern bool login(string user, string pass);

然后就可以在任何地方調用該接口了,完整代碼如下。

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace test_dll_CSharp
{
class Program
{
[DllImport('hellodll.dll', EntryPoint = 'login', SetLastError = true, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Winapi)]
public static extern bool login(string user, string pass);
static void Main(string[] args)
{
bool b;
b = login('admin', 'admin');
}
}
}

4、動態調試庫的調試方法

設置動態鏈接庫hellodll工程選項,選擇調試運行的exe名字及路徑,這里選擇為測試程序test_dll.exe編譯部署的位置。

選擇dll部署到NandFlash目錄。

設置好斷點,點擊運行,當指定程序test_dll.exe調用到動態鏈接庫時,既能觸發斷點。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • WINDOWS
    +關注

    關注

    4

    文章

    3600

    瀏覽量

    90752
  • 嵌入式主板
    +關注

    關注

    7

    文章

    6095

    瀏覽量

    36096
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    請問如何鏈接動態

    是否有可參考的工程? 鏈接成功后動態應該放在哪里啊?SDK是RTOS_ONLY
    發表于 04-25 08:15

    有沒有什么方案能實現直接用matlab或python調用D4100_usb.dll?

    這個動態鏈接庫編寫程序控制DMD,我分別嘗試用C++,matlab,Java和python使用D4100_usb.dll進行編程,但只有用C++的時候可以正常使用,原因很可能是D4100_usb.dll
    發表于 02-27 06:59

    龍芯中科榮獲2024年度信息技術應用創新工作委員會卓越貢獻成員單位

    近日,中國電子工業標準化技術協會信息技術應用創新工作委員會(以下簡稱“信工委會”)在北京召開2024年度工作總結座談會暨信“大比武”總結大會。中國工程院院士、信
    的頭像 發表于 01-23 10:50 ?472次閱讀

    芯盛智能榮獲2024年信息技術應用創新工作委員會卓越貢獻成員單位

    日前,中國電子工業標準化技術協會信息技術應用創新工作委員會(以下簡稱 “信工委會”)2024 年度總結座談會于北京隆重舉行。此次會議對在信工作中作出突出貢獻的成員單位予以表彰。江蘇
    的頭像 發表于 01-20 09:56 ?465次閱讀

    QT調用動態開發IC卡讀寫程序

    塊、第3塊,每塊16個字節,第3塊是塊,禁止在此存放數據。第0塊、第1塊、第2塊可隨意存放數據。但第0區的第0塊已被固化了IC卡出廠信息,此塊只能讀出信息,不可更改。 ? 調用DLL動態
    的頭像 發表于 12-30 09:25 ?404次閱讀

    QT調用動態

    \", \"動態沒裝載!原因是動態OUR_IDR.dll沒放在生成exe文件相同目錄下!\"); return; } idr_beep myidr_beep
    發表于 12-28 16:19

    飛騰助力首屆教育信息技術應用創新大賽圓滿落幕

    近日,由中國教育技術協會主辦,教育部教育管理信息中心教育信實驗室、公安部第三研究所、中國電子工業標準化技術協會信工委會支持,北京航空航天
    的頭像 發表于 12-24 09:57 ?411次閱讀

    有方科技參編的信息技術團體標準發布

    近日,有方科技參編的《信息技術產品供應鏈成熟度 共性指標 第1部分:企業背景評價》《信息技術產品供應鏈成熟度 共性指標 第2部分:技術掌控評價》《信息技術產品供應鏈成熟度 共性指標 第
    的頭像 發表于 12-23 10:44 ?483次閱讀

    龍芯中科助力2024首屆教育信息技術應用創新大賽成功舉辦

    近日,2024首屆教育信息技術應用創新大賽在北京航空航天大學成功舉辦。本次大賽由中國教育技術協會主辦,教育信實驗室、公安部第三研究所、中國電子工業標準化技術協會信
    的頭像 發表于 12-19 17:02 ?452次閱讀

    深入探討Linux系統中的動態鏈接庫機制

    本文將深入探討Linux系統中的動態鏈接庫機制,這其中包括但不限于全局符號介入、延遲綁定以及地址無關代碼等內容。 引言 在軟件開發過程中,動態鏈接
    的頭像 發表于 12-18 10:06 ?462次閱讀
    深入探討Linux系統中的<b class='flag-5'>動態</b><b class='flag-5'>鏈接庫</b>機制

    安卓動態鏈接庫文件體積優化探索實踐

    諸多方面影響,針對dex、資源文件、so文件都有不同的優化策略,在此不做一一展開,本文主要記錄了在研發時針對動態鏈接庫的文件體積裁剪優化方案。 我開發的鏈接庫使用rust語言開發,通過安卓jni接口實現java層和native層
    的頭像 發表于 11-21 14:07 ?346次閱讀

    中科達榮獲2024年軟件和信息技術服務優秀企業

    及前百家企業”名單。中科達憑借非凡的技術實力與持續的創新能力,成功入選“2024年度軟件和信息技術服務競爭力百強企業”以及“2024年軟件和信息技術服務優秀企業”。
    的頭像 發表于 10-30 11:44 ?771次閱讀

    加速鯤鵬落地!拓維信息遷移工具榮獲鯤鵬原生開發技術認證

    認證。圖/拓維·數據適配中間件取得鯤鵬原生開發N認證在數字化時代的大潮中,信戰略作為國家推動信息技術應用創新、保障信息安全與自主可控的關鍵舉措,其重要性日益凸顯
    的頭像 發表于 09-10 08:03 ?665次閱讀
    加速鯤鵬落地!拓維<b class='flag-5'>信息</b>信<b class='flag-5'>創</b>遷移工具榮獲鯤鵬原生開發<b class='flag-5'>技術</b>認證

    嵌入式學習-靜態鏈接動態鏈接

    會發現,so文件里全是亂碼,這就是使用動態鏈接庫的一個好處,可以防止核心算法的泄露。現在就可以將mymath.c刪除掉了:直接調用編譯發現程序不能運行。下面將我們自己建立的
    發表于 08-28 09:33

    靜態鏈接動態鏈接

    的時候會發現,so文件里全是亂碼,這就是使用動態鏈接庫的一個好處,可以防止核心算法的泄露。 現在就可以將mymath.c刪除掉了: 直接調用編譯發現程序不能運行。 下面將我們自己建立
    發表于 08-27 10:20
    主站蜘蛛池模板: 日韩中文视频 | 黄色美女网站免费看 | 女人张开腿 让男人桶视频 女人张开腿等男人桶免费视频 | 国产色婷婷精品综合在线 | 狼色在线视频 | 天天干天天舔天天射 | 美女喷白浆 | 欧美特黄视频在线观看 | 亚洲视频四区 | 18性夜影院午夜寂寞影院免费 | 欧亚精品卡一卡二卡三 | 久久草在线播放 | 免费播放特黄特色毛片 | 免费一级特黄特色黄大任片 | 爱逼综合 | 性色xxx | 性欧美一区| 日本免费网站在线观看 | 欧美视频免费一区二区三区 | 三级视频中文字幕 | 色视频网站色视频播放 | 欧美福利视频网 | 天天舔天天射天天操 | 亚洲酒色1314狠狠做 | 99久久无色码中文字幕 | 新版天堂中文资源官网 | hs网站在线观看 | 激情综合色综合啪啪开心 | 午夜久久久 | 亚洲啪啪免费视频 | 久久本道综合色狠狠五月 | 午夜一级毛片看看 | 国产三级中文字幕 | 搞逼综合网 | 午夜精品视频任你躁 | 伊人最新网址 | 亚洲成a人片8888kkkk | 亚洲一区有码 | 91视频观看 | 免费又爽又黄禁片视频在线播放 | 羞涩妩媚玉腿呻吟嗯啊销魂迎合 |