中文字幕第五页-中文字幕第页-中文字幕韩国-中文字幕最新-国产尤物二区三区在线观看-国产尤物福利视频一区二区

C++DLL怎么導(dǎo)出

本篇內(nèi)容介紹了“C++ DLL怎么導(dǎo)出”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

成都創(chuàng)新互聯(lián)公司是一家專注于成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)與策劃設(shè)計(jì),沛縣網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)10年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:沛縣等地區(qū)。沛縣做網(wǎng)站價(jià)格咨詢:13518219792

通常項(xiàng)目中導(dǎo)出 DLL 接口有兩種方式:

1. __declspec(dllexport) 導(dǎo)出;

2.*.def 文件導(dǎo)出。

__declspec(dllexport) 導(dǎo)出

在 DLL 導(dǎo)出的函數(shù)名稱前使用 _declspec(dllexport) 關(guān)鍵字導(dǎo)出函數(shù)接口。

test_dll.h
// test_dll.h
 
#ifdef __cplusplus
extern "C" {
#endif
#ifdef  DLL_EXPORT
#else
#define DLL_EXPORT _declspec(dllexport)
#endif
 
 
DLL_EXPORT int add(int a, int b);
DLL_EXPORT int sub(int a, int b);
 
 
#ifdef __cplusplus
}
#endif
test_dll.cpp
// test_dll.cpp
#include "test_dll.h"
int add(int a, int b)
{
    return a + b;
}
int sub(int a, int b)
{
    return a - b;
}

def 文件導(dǎo)出

由于  __declspec(dllexport) 導(dǎo)出接口需要定義一長(zhǎng)串的內(nèi)容,所以 MS 引入 def文件 來(lái)導(dǎo)出函數(shù)接口。 
使用 def文件 相對(duì)簡(jiǎn)單,只需要在項(xiàng)目中增加一個(gè)后綴名為 .def 的文件,按照格式將 DLL 需要導(dǎo)出的接口定義在 def 文件即可。

1.定義 .def 文件

test_dll.def

LIBRARY test_dll
EXPORTS
    add        @1
    sub        @2
  • DllName 表示 Dll 的文件名

  • @1 [可選] 指定導(dǎo)出的函數(shù)序號(hào)。導(dǎo)出多個(gè)函數(shù)時(shí),需要開(kāi)發(fā)者自定義序號(hào),不能重復(fù)。

2.添加 def 文件至工程

C++ DLL怎么導(dǎo)出

3.設(shè)置工程屬性

在 “屬性”->“鏈接器”->“輸入” 配置 模塊定義文件 輸入 def文件 名稱。 

C++ DLL怎么導(dǎo)出

4.編譯生成 DLL
使用工具查看導(dǎo)出函數(shù)名接口,導(dǎo)出接口的順序與 def文件 定義的序號(hào)相同。

C++ DLL怎么導(dǎo)出

存在問(wèn)題

  • 通過(guò)工具可以查看導(dǎo)出函數(shù)名,暴露接口函數(shù)功能。

  • 導(dǎo)出的函數(shù)名可以任意被訪問(wèn)和使用,即使業(yè)務(wù)功能被封裝在內(nèi)部代碼經(jīng)過(guò)加密處理,但外部接口是公開(kāi)的,可以被正常調(diào)用。造成在不知情,被未經(jīng)授權(quán)的開(kāi)發(fā)者濫用,間接造成損失。

解決方案:導(dǎo)出匿名接口

導(dǎo)出匿名序號(hào)接口

匿名導(dǎo)出接口只需要在 def文件 的導(dǎo)出接口名稱增加 NONAME 關(guān)鍵字即可,如下:

test_dll.def

LIBRARY test_dll
EXPORTS
    add        @1        NONAME
    sub        @2        NONAME
  • NONAME 表示不導(dǎo)出函數(shù)名稱(匿名)。

使用 CFF Explorer 工具查看導(dǎo)出函數(shù)接口名稱,函數(shù)名稱已經(jīng)被隱藏掉。

C++ DLL怎么導(dǎo)出

訪問(wèn)匿名序號(hào)接口

靜態(tài)鏈接

和通常工程引用 DLL 的方法相同,引用 .h,鏈接 .lib,運(yùn)行前將 .dll 文件拷貝至應(yīng)用運(yùn)行目錄即可。

動(dòng)態(tài)加載

通過(guò)動(dòng)態(tài)加載的方式調(diào)用DLL接口。 
當(dāng)導(dǎo)出序號(hào)時(shí),定義函數(shù)指針變得復(fù)雜,只能通過(guò)靜態(tài)反編譯的方式確定參數(shù)數(shù)量和類型,定義函數(shù)指針。

#include <Windows.h>
// 定義函數(shù)指針
typedef int (*func_ptr)(int, int);
int dynamic_load_dll()
{
    // 動(dòng)態(tài)加載 DLL 文件
    HINSTANCE hDll = LoadLibrary("test_dll.dll");
    // 定義函數(shù)指針變量
    func_ptr add_ptr, sub_ptr;
    if(hDll){
        add_ptr = (func_ptr)GetProcAddress(hDll, (LPCSTR)1);    // 根據(jù)導(dǎo)出序號(hào)加載函數(shù)(add)
        sub_ptr = (func_ptr)GetProcAddress(hDll, (LPCSTR)2);    // 根據(jù)導(dǎo)出需要加載函數(shù)(sub)
    }else{
        printf("Load DLL failed!\n");
        return 1;
    }
    if (add_ptr) {
        printf("%d\n", add_ptr(11, 4));
    } else {
        printf("GetProcAddress add function failed!\n");
        return 1;
    }
    if (sub_ptr) {
        printf("%d\n", sub_ptr(21, 4));
    } else {
        printf("GetProcAddress sub function failed!\n");
        return 1;
    }
    return 0;
}
注意:定義函數(shù)指針的類型聲明必須與函數(shù)定義一致,否則無(wú)法正常使用。

“C++ DLL怎么導(dǎo)出”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

新聞標(biāo)題:C++DLL怎么導(dǎo)出
鏈接分享:http://www.2m8n56k.cn/article2/jdshoc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷外貿(mào)網(wǎng)站建設(shè)小程序開(kāi)發(fā)商城網(wǎng)站網(wǎng)站導(dǎo)航定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:[email protected]。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

綿陽(yáng)服務(wù)器托管
主站蜘蛛池模板: 女性无套免费网站在线看 | 网友自拍第一页 | 伊人久久大香线焦综合四虎 | 国产成人理在线观看视频 | 三级大片网站 | aaaaaa级特色特黄的毛片 | 99久久精品免费观看国产 | 欧美a级在线观看 | 蜜桃日本一道无卡不码高清 | 72种姿势欧美久久久久大黄蕉 | 成年女人毛片免费播放视频m | 日韩精品在线一区 | 爱啪网亚洲第一福利网站 | 国产第四页 | 欧美丝袜xxxxx在线播放 | 播播网手机在线播放 | 久久综合婷婷 | 91成年人免费视频 | 一区二区三区视频免费 | 欧美搞黄视频 | 欧洲成人在线视频 | 国产成人精品亚洲777图片 | avove在线播放 | 日韩成人毛片高清视频免费看 | 中国黄色一级大片 | 国产在线日韩在线 | 91av福利 | 日本综合欧美一区二区三区 | 成人免费在线视频网 | 国产亚洲精品久久久久久午夜 | 看一级特黄a大一片 | 亚洲手机在线观看 | 一级做a爰在线就看 | 精品九九久久 | 一级毛片一级毛片一级毛片 | 毛片大片 | 亚洲欧美在线精品一区二区 | 国产精品美乳免费看 | 国内自拍网| 亚洲欧美日韩国产专区一区 | 国产在线播放不卡 |