1. 程式人生 > >extern "C" __declspec(dllexport) 用法

extern "C" __declspec(dllexport) 用法

declspec(dllexport)和使用.def檔案是有區別的。如果DLL是提供給VC++使用者使用的,你只需要把編譯DLL時產生的.lib提供給使用者,它可以很輕鬆地呼叫你的DLL。但是如果你的DLL是供其他程式如VB、delphi,以及.NET使用者使用的,那麼會產生一個小麻煩。因為VC++對於__declspec(dllexport)宣告的函式會對函式名尾附加函式在DLL中的地址,如下面的函式: __declspec(dllexport) int __stdcallIsWinNT() 會轉換為[email protected],這樣你在VB中必須這樣宣告: Declare Function IsWinNT Lib "my.dll" Alias "[email protected]" () As Long @的後面的數由於引數型別不同而可能不同。這顯然不太方便。所以如果要想避免這種轉換,就要使用.def檔案方式。 EXPORTS後面的數可以不給,系統會自動分配一個數。對於VB、PB、Delphi使用者,通常使用按名稱進行呼叫的方式,這個數關係不大,但是對於使用.lib連結的VC程式來說,不是按名稱進行呼叫,而是按照這個數進行呼叫的,所以最好給出。 除了.def的解決方案外,還可以原樣編譯:
1 extern "C" int __declspec(dllexport) MyFunction();

相關推薦

extern "C" __declspec(dllexport) 用法

declspec(dllexport)和使用.def檔案是有區別的。如果DLL是提供給VC++使用者使用的,你只需要把編譯DLL時產生的.lib提供給使用者,它可以很輕鬆地呼叫你的DLL。但是如果你的DLL是供其他程式如VB、delphi,以及.NET使用者使用的,那麼會

DLL進一步講解:extern C & __declspec(dllexport)

模組定義 (.def) 檔案是包含一個或多個描述各種 DLL 屬性的 Module 語句的文字檔案。 1、二者的目的都是將公共符號匯入到應用程式中或從 DLL 匯出函式。 2、新增 __declspec(dllexport)是為了提供不使用.def檔案從 .EXE 或 .DLL 匯出函式的簡單方法。 3、如果

extern "C" __declspec(dllexport)

模組定義 (.def) 檔案是包含一個或多個描述各種 DLL 屬性的 Module 語句的文字檔案。 1、二者的目的都是將公共符號匯入到應用程式中或從 DLL 匯出函式。 2、新增 __declspec(dllexport)是為了提供不使用.def檔案從 .EXE 或 .DLL 匯出函式的簡單方法。 3、如果

動態庫匯出宣告 : extern "C" __declspec(dllexport) 與 __declspec(dllexport)

最近在做專案,在動態載入動態庫後,使用GetProcAddress( HMODULE hModule, LPCWSTR lpProcName)獲取匯出的函式的地址時,發現不能獲得函式地址。 通過檢查發現是宣告動態庫匯出的定義不同導致: 在使用extern "C" __dec

ios 開發使用 extern "C" __declspec(dllimport) 導致 unknown type name "__declspec"

iOS 開發匯入c++ 檔案 使用extern "C" __declspec(dllimport) 導致 unknown type name "__declspec" 位元組方法,刪除這個部分,ios不需要這個部分

C ++ extern "C"的用法

   在C++的很多程式碼中,我們經常看到有extren "C"的程式碼片段,很多人並不清楚其中的含義。而且,我們在C/C++中還會經常看到一個關鍵字,extren。因此,這樣造成了很多的用法和理解上的混淆。     我們先說一下extren關鍵字,這個關

C++: extern關鍵字功能和用法研究

今天遇到在aaa.cpp檔案中定義如下函式:                                   &nbs

extern "C" 用法理解與總結

被extern "C"修飾的變數和函式是按照C語言方式進行編譯和連結的 舉個例子: 1.moduleA、moduleB兩個模組 2.B呼叫A中的程式碼 3.其中A是用C語言實現的,而B是利用C++實現的 //moduleA標頭檔案:moduleA.h #ifnde

extern "c"用法 extern "C"與.def檔案的作用

引言 C++保留了一部分過程式語言的特點,因而它可以定義不屬於任何類的全域性變數和函式。但是,C++畢竟是一種面向物件的程式設計語言,為了支援函式的過載,C++對全域性函式的處理方式與C有明顯的不同。extern "C"的主要作用就是為了能夠正確實現C++程式碼呼叫其他C

關於extern "c"的用法解析(轉載)

引言 C++保留了一部分過程式語言的特點,因而它可以定義不屬於任何類的全域性變數和函式。但是,C++畢竟是一種面向物件的程式設計語言,為了支援函式的過載,C++對全域性函式的處理方式與C有明顯的不同。 extern “C”的主要作用就是為了能夠正確

C++string類用法

last emp 進行 iii str2 line rep har ddd 1.string類的輸入操作(string類重載運算符operator>>用於輸入,同樣重載運算符operator<<用於輸出操作)operator是C++的關鍵字,它和運算

c/c++中const用法總結

沒有 pan 分配 值類型 變量初始化 _id 多少 部分 參數 1、修飾常量時:   const int temp1; //temp1為常量,不可變   int const temp2; //temp2為常量,不可變 2、修飾指針時:   主要看const在*的前後,

C++:UNREFERENCED_PARAMETER用法

禁用 我想 解釋 一行 .com under 必須 配置 級別 原文地址:http://www.cnblogs.com/kex1n/archive/2010/08/05/2286486.html 作用:告訴編譯器,已經使用了該變量,不必檢測警告! 在VC編譯器下,如果您用最

基礎知識之 - C# Using的用法

spa 方案 image acl 決定 ogr 托管 sid 引入 C#裏面Using有兩種用法: 1.作為指令。 using+命名空間,導入其他命名空間中定義的類型,這樣可以在程序中直接用命名空間中的類型,不必指定命名空間; 命名空間是.NET程序在邏輯上

extern C的作用具體解釋

archive 連接方式 一道 org 深入 key ext vxworks 局部變量 轉載於:http://www.cnblogs.com/rollenholt/archive/2012/03/20/2409046.html 1.引言   C+&#

C#中Split用法~字符串分隔

rec get 字符 說明 logs sep bbs options tle 1、用字符串分隔: using System.Text.RegularExpressions;string str="aaajsbbbjsccc";string[] sArray=

(轉)C# :base的用法(冒號後面的base)

new class pan client isp obj logs 重寫 http c# 中關於: base()用法,在此記錄一下,方便查閱 1.this是標識當前資源對象的,而base是基於父級的。 2.base發揮了期靈魂級的作用——多態 3.base子類可以訪

C/C++:static用法總結

.sh pre 值類型 定義和使用 靜態 public out pan -1 前言:static是C/C++中一個很重要的關鍵字,最近閱讀了很多博客和資料,遂在此對自己的學習筆記進行簡單的總結並發表在這裏 一、C語言中的static ? 靜態全局變量:在全局變量之前加

C# yield return用法

理解 ring ref 所有 每次 () r12 停止 image 本文實例講述了C#中yield return用法,並且對比了使用yield return與不使用yield return的情況,以便讀者更好的進行理解。具體如下: yield關鍵字用於遍歷循環中,yiel

extern C的作用

.net .com sdn extern c question https details 處理 c++編譯 #ifdef __cplusplus extern "C" { #endif //一段代碼 #ifdef __cplusplus } #endif https://