1. 程式人生 > >DLL進一步講解:extern C & __declspec(dllexport)

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

模組定義 (.def) 檔案是包含一個或多個描述各種 DLL 屬性的 Module 語句的文字檔案。
1、二者的目的都是將公共符號匯入到應用程式中或從 DLL 匯出函式。
2、新增 __declspec(dllexport)是為了提供不使用.def檔案從 .EXE 或 .DLL 匯出函式的簡單方法。
3、如果不使用 __declspec (dllimport) 或 __declspec(dllexport) 匯出 DLL 函式,則 DLL 需要.def檔案。
4、並不是任何時候選擇新增 __declspec(dllexport)而放棄.def的方式都是好的。如果DLL是提供給VC++使用者使用的,只需要把編譯DLL時產生的.lib提供給使用者,它可以很輕鬆地呼叫你的DLL。但是如果DLL是供VB、PB、Delphi使用者使用的,那麼會產生一個小麻煩。因為VC++對於__declspec(dllexport) 宣告的函式會進行名稱轉換,如下面的函式: 
     __declspec(dllexport) int __stdcall IsWinNT() 
     會轉換為
[email protected]
,這樣你在VB中必須這樣宣告: 
     Declare Function IsWinNT Lib "my.dll" Alias "[email protected]" () As Long 
     @的後面的數由於引數型別不同而可能不同。這顯然不太方便。所以如果要想避免這種轉換,就要使用.def檔案方式。

相關推薦

DLL進一步講解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

extern "C" __declspec(dllexport)

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

extern "C" __declspec(dllexport) 用法

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

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

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

C++ 系列extern

相同 不同 創建 外部 lar 如果 符號 未分配空間 -c extern 作用1:聲明外部變量現代編譯器一般采用按文件編譯的方式,因此在編譯時,各個文件中定義的全局變量是互相透明的,也就是說,在編譯時,全局變量的可見域限制在文件內部。 例1:創建一個工程,裏面含有A.cp

C#開發奇技淫巧二根據dll文件加載C++或者Delphi插件

man int cnblogs 需要 pat method msg initial 函數指針 原文:C#開發奇技淫巧二:根據dll文件加載C++或者Delphi插件 這兩天忙著把框架改為支持加載C++和Delphi的插件,來不及更新blog了。 原來的

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

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

DLL編寫中externC”和__stdcall的作用

動態連結庫的使用有兩種方式,一種是顯式呼叫。一種是隱式呼叫。 (1)       顯式呼叫:使用LoadLibrary載入動態連結庫、使用GetProcAddress獲取某函式地址。 (2)       隱式呼叫:可以使用#pragma comment(lib, “XX.

ffmpeg連結錯誤關於C++ extern "C"

http://www.360doc.com/content/13/0502/17/9192936_282472350.shtml 在編譯一個ffmepg AAC解碼測試程式時,遇到了如下錯誤輸出: 1>main.obj : error LNK2001: 無法

講解第一個 C 語言程式”HelloWorld”

這是我學的第一個C語言程式:Hello World!如此簡單精煉的一個程式,其實分開來看都不簡單。#include<stdio.h> int main() { printf("Hello World!\n"); return 0; }現在來分部瞭解一下

C++ 講解多繼承和多重繼承

多繼承和多重繼承 多繼承 多繼承是一個類有2個以上父類。 多繼承的物件初始化方式是父類依次初始化。 A()–>B–>AB() 銷燬時正好是初始化的反順序。 ~AB–>~

深入淺出講解php的socket通信

刪除 不一定 電話鈴 例子 通過 另一個 一次 函數返回 ima 對TCP/IP、UDP、Socket編程這些詞你不會很陌生吧?隨著網絡技術的發展,這些詞充斥著我們的耳朵。那麽我想問:1. 什麽是TCP/IP、UDP?2. Socke

extern C的作用具體解釋

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

VSTO使用C#開發Excel、Word【1】

windows ipp 加權 result 項目 進行 設計工程師 too 軟件 《Visual Studio Tools for Office: Using C# with Excel, Word, Outlook, and InfoPath 》——By Eric Car

VSTO使用C#開發Excel、Word【3】

定義 應用程序 導致 編程 生活 成功 員工 無法使用 我們 前言在2002年,Visual Studio .NET和.NET Framework的第一個版本即將完成。我們中的幾個意識到微軟的.NET將會錯過Office,除非我們做了一些事情。 以前曾經是Visual Ba

VSTO使用C#開發Excel、Word【4】

托管 nic tools sha 為我 exc cart man 還要 致謝雖然封面上只有兩個名字,但沒有這麽多專門人士的努力,沒有這樣大的書籍。 埃裏克·卡特(Eric Carter)感謝他的整個家庭,他們表現出的耐心,而“爸爸”正在研究他的書:傑森,海利,卡米拉,蘭德和

VSTO使用C#開發Excel、Word【6】

exc 和集 handle helper class a 一切都 mic 必須 ges Office主互操作程序集(PIA)在了解如何構建Office解決方案之前,您需要更詳細地了解在.NET中與Office對象模型通信的托管程序集。用於與Office通話的托管程序集稱為O

VSTO使用C#開發Excel、Word【8】

公式 插件 郵件發送 tool 集合 應該 將在 bject 發現 office加載項Office開發中使用的第二種模式是加載項模式。本書涵蓋了幾種Office加載項。其中包括Outlook的VSTO加載項,Excel和Word的COM加載項以及Excel的自動化加載項:

VSTO使用C#開發Excel、Word【9】

message 正在 oba 簡單的 rand mes nts 支持 文檔 文件背後的代碼VSTO支持文檔背後的代碼,要求開發人員使用VSTO項目中生成的具有預連接上下文和預連接事件的類。這些類有時被稱為“代碼後面”類,因為它們是與特定文檔或工作表相關聯的代碼。在Word中