1. 程式人生 > >def檔案 匯出dll過載函式

def檔案 匯出dll過載函式

轉載地址:http://blog.163.com/very_apple/blog/static/27759236201092024110861/

動態連結庫DLL_Sample.dll


DLL_Sample.h:
#ifdef TEST_API
# define TEST_API _declspec(dllexport)
#else
# define TEST_API _declspec(dllimport)
#endif

TEST_API int fuc(int a);
TEST_API int fuc(int a, int b);
TEST_API int fuc(int a, int b, int c);
DLL_Sample.cpp:
#define TEST_API
#include "DLL_Sample.h"

TEST_API int fuc(int a)
{
  return a;
}

TEST_API int fuc(int a, int b)
{
  return a + b;
}

TEST_API int fuc(int a, int b, int c)
{
  return a + b + c;
}

在動態呼叫dll之前,需要檢視一下dll匯出的函式名稱。
檢視編譯器的匯出名稱,可以用VS工具目錄下的Dependency Walker,或者在控制檯下使用命令:dumpbin /exports DLL_Sample.dll  

這裡我用dumpbin命令得到下面的資訊:

1 0 00011348
[email protected]
@[email protected]
2 1 00011352 [email protected]@[email protected]
3 2 000111DB [email protected]@[email protected]

可以看到,過載函式各個版本的名稱是不同的,這是因為編譯器重新編碼了過載函式的名稱。
為了方便記憶和使用,我們需要指定過載函式的命名規則,由於匯出函式名的唯一性,我們無法將過載函式指定成相同的名稱,所以我們採用fuc1、fuc2、fuc3來標識fuc函式的不同版本。
我們用模組定義檔案(.def)來定義dll匯出。

DLL_Sample.def:

LIBRARY DLL_Sample
EXPORTS
[email protected]
@[email protected]
[email protected]@[email protected]
[email protected]@[email protected]
然後寫動態呼叫的示例程式碼(這裡呼叫了第二個版本的fuc函式):
    
HINSTANCE hInst = LoadLibrary("Dll_Sample.dll");
typedef int (*MyProc)(int a, int b);
MyProc Fuc = (MyProc)GetProcAddress(hInst, "fuc2");

if (!Fuc)
{
  MessageBox ("Fuc2 is null!");
  return;

}

CString str;
str.Format ("a + b = %d", Fuc(2, 3) );
MessageBox(str);
FreeLibrary (hInst);

結果輸出“a + b = 5”

相關推薦

def檔案 匯出dll過載函式

轉載地址:http://blog.163.com/very_apple/blog/static/27759236201092024110861/ 動態連結庫DLL_Sample.dll DLL_Sample.h: #ifdef TEST_API # define TEST

def檔案&匯出函式&lib檔案關聯

lib /list xx.lib 列出lib裡所有obj檔名,我這裡如下 。。。。。很多省略 lib/err/err.obj lib/dict/dictll.obj lib/coreDump/coreDumpWin32.obj lib/config/preference.obj lib/config/con

利用VS2010生成DLL檔案DLL函式和全域性變數的使用

一、首先利用VS2010生成DLL檔案,步驟如下 1、開啟VS2010,在左邊的框欄中選擇C++,中間選擇win32控制檯應用程式,如下圖 2、確認後,彈出下面對話方塊 3、選擇下一步,彈出如

用VC和MinGW匯出dlldef和lib(a)檔案

開發十年,就只剩下這套架構體系了! >>>   

dll生成def檔案 並生成lib檔案

在開始選單開啟Visual Studio 2015\Visual Studio Tools\Windows Desktop Command Prompts\VS2015 x86 x64 Cross Tools Command Prompt 切換到DLL所在目錄 在命令視窗輸入 cd /d "你的

9.淺談.dll .lib .def檔案格式究竟是什麼

我最近在github上下載了一個專案,需要配到fftw的第三方庫,可是看到一堆dll檔案,lib檔案,def檔案,頭都暈了,不知道這些東西是什麼,怎麼用,下面就我查詢的資料做一個小結。 據說,出現.lib .dll 這種檔案的原因是為了保護原始碼,這個以後機會我

windows dlldef檔案

  DLL(testcase_1.dll )原始碼:myfun.h #pragma once #ifdef TESTCASE_1_EXPORTS #define MY_API __declspec(dllexport) #else #define MY_API __declspec(d

Windows下檢視library(即.lib檔案)匯出函式或32、64位編譯等資訊的方法

開發人員都知道,檢視DLL或exe檔案匯出函式、依賴檔案等資訊,使用Depends即可,Depends.exe隨VC6.0平臺釋出。 但是,Depends卻不能想檢視靜態庫.lib檔案的相關資訊,那如果想 1)檢視.lib檔案資訊; 2)沒有安裝VC6.0環境,卻想檢視DL

根據DLL檔案生成LIB檔案def檔案

首先開啟VS的命令提示符,依次輸入下面的命令(以VLC為例)dumpbin /exports "D:\Program Files\VideoLAN\VLC\libvlc.dll" > "D:\Program Files\VideoLAN\VLC\libvlc.def"e

Eclipse for C/C++ (三)編寫DLL檔案def檔案的使用

一、def檔案說明 通常我們編寫動態連結庫時,一般使用的都是vc或vs等相關的整合開發環境。在編寫的過程中,當使用__stdcall 標準方式呼叫時,有一個問題是經常遇到的,那就是匯出的函式名的問題。 在vc或vs相關整合開發環境下,有許多相

如何通過.def檔案的方式匯出

看了許多資料,大部分都是通過__declspec(dllexport) 修飾符進行匯出的。 通過.def檔案匯出函式和類都可以實現,但是匯出模板函式和模板類卻沒有找到,但是沒關係。 例子: d

windows xp sp3 系統gdi32.dll所有匯出的API函式列表大全(整理在此,方便查閱,學習)

 gdi32.dll是Windows GDI圖形使用者介面相關程式,包含的函式用來繪製圖像和顯示文 ordinal hint RVA name 1

VS中def檔案對於生成dll和lib檔案的作用

把 sqlite3.def 新增到工程中. 選擇工程 > 屬性中的連結器,然後找到"輸入"這一項. 在 "模組定義檔案" 中輸入  sqlite3.def 注意: 你需要在 Debug 和 Release 中都輸入該項才行. 一、 __declspec(dllexport) 在 32

【Python學習】使用Pyinstaller將py檔案匯出為exe檔案

PyInstaller其實就是把python解析器和你自己的指令碼打包成一個可執行的檔案,但是它不是跨編譯的,也就是說在Windows下用PyInstaller生成的exe只能執行在Windows下,在Linux下生成的只能執行在Linux下。 Pyinstaller的安裝 直接使用pip install

已有的專案檔案編譯DLL

編譯的時候,庫名稱一定要和cpp以及H標頭檔案名一致,方便且不容易找不到 檔案→新建→從現有程式碼,選擇c++ 然後選擇程式碼的目錄 選擇dll工程   1、用def定義函式,此方法函式名稱在編譯後不會改變。 工

基於POI檔案匯出

首先 匯入對應jar包,poi開頭的6個,匯入POI相關包(http://poi.apache.org/) 然後編輯對應工具類, public class PoiOutCarteamExcel extends AbstractExcelView { @Override protecte

檔案匯出的get和post方式

get方式(3種寫法): 1、window.open("**")是用新視窗開啟URL頁面 2、location.href="**"是用當前頁面顯示URL window.open(this.GLOBAL.API_Spm_result+ "completionday/batchId/post

JAR檔案匯出為.exe可執行檔案

為什麼要匯出為.exe檔案? ①客戶需求,客戶有這樣的需求,程式設計師得完成釋出的任務。 ②jar執行需要將其Java專案所需要的jar檔案放置在同一個資料夾之中,難以管理。 ③相對而言,匯出為.exe檔案所佔用的儲存空間更少。 ④最重要的一點,可以通過相關方法將jdk整合到.exe檔案

poi 檔案匯出

public void download(ByteArrayOutputStream byteArrayOutputStream, HttpServletResponse response, String returnName) throws IOException{ //設定響應檔案型別

android ANR traces.txt檔案匯出分析

來源:https://blog.csdn.net/qq_31939617/article/details/79756718 一:什麼是ANR ANR:Application Not Responding,即應用無響應,ANR找原因,基本是通過traces.txt檔案分析的 先說發生ANR後,如何匯出tra