先簡單說一下這篇小文的目的。其實純粹是因爲上一篇文章《將C語言源代碼編譯成動態鏈接庫》裏面介紹了用命令行工具(cl、link或gcc)創建動態鏈接庫,但程序員在實際工作中用得最多的還是IDE,所以有必要說說在IDE裏面怎麼做這件事。
創建動態鏈接庫,那就直接用C++好了,Visual C++多麼強大。但是我喜歡C語言勝過喜歡C++,所以打算看看如何用純C來創建動態鏈接庫。
工具依然選擇Visual C++ 2010 Express,種種好處不再一一敷述。
我們現看看怎麼用C++創建動態鏈接庫,再看看怎麼用C創建動態鏈接庫。
我們在Visual C++ 2010 Express裏面,分別用 C++ 和 C 來把下面這個簡單的函數封裝到動態鏈接庫(DLL)裏面:
一、Visual C++ 2010 Express Tips: 用 C++ 創建動態鏈接庫
Step 1:創建Win32 Console Application
本例中我們創建一個叫做“Test”的Solution。
Step 2:將Application Type設定爲DLL
在接下來的 Win32 Application Wizard 的 Application Settings 中,將 Application type 從 Console application 改爲 DLL:
Step 3:將方法暴露給DLL接口
現在在這個Solution中,目錄和文件結構是這樣的:
編輯 Test.cpp 如下:
#include "stdafx.h"
extern "C"
{
__declspec(dllexport) int sum(int a, int b)
{
return a + b;
}
}
Step 4:編譯
直接編譯即可。
二、Visual C++ 2010 Express Tips: 用 C 創建動態鏈接庫
下面我們用C來創建DLL。
前兩步和用C++創建DLL是完全一樣的:
Step 1:創建Win32 Console Application
本例中我們創建一個叫做“Test”的Solution。
Step 2:將Application Type設定爲DLL
在接下來的 Win32 Application Wizard 的 Application Settings 中,將 Application type 從 Console application 改爲 DLL:
Step 3:更改編譯選項
現在我們在此Project的Properties裏面,找到 Configuration Properties | C/C++ | Advanced | Compile As 把這一項從默認設置(Default)更改爲Compile as C Code (/TC)
然後,再在此Project的Properties裏面,找到 Configuration Properties | C/C++ | Precompiled Headers | Precompiled Header 把這一項從默認的 Use(/Yu) 更改爲Create(/Yc)
Step 4:刪掉/重命名.cpp文件,增加.c文件
現在在這個Solution中,目錄和文件結構是這樣的(當然現在和C++的例子完全一樣,但是馬上我們所刪除/重命名.cpp文件):
現在,我們這樣做:
- 將 dllmain.cpp 重命名(Rename)成 dllmain.c
- 將 Test.cpp 重命名(Rename)成 Test.c
- 刪除 stdafx.cpp (Remove --> Delete)
現在我們的solution的目錄和文件結構是這樣的:
Step 5:將方法暴露給DLL接口
編輯 Test.c 如下:
#include "stdafx.h"
__declspec(dllexport) int sum(int a, int b)
{
return a + b;
}
和C++的代碼相比,由於現在已經是純C語言的環境了,所以不再需要 extern "C" 這個申明瞭。
Step 6:編譯
直接編譯即可。
參考文獻:
- 將C語言源代碼編譯成動態鏈接庫 http://blog.csdn.net/xinyaping/article/details/7284899
- Visual C++ 2010 Express Tips: 編寫C語言程序 http://blog.csdn.net/xinyaping/article/details/6833679