VS2010下生成dll的方法
1.首先創(chuàng)建生成dll的項(xiàng)目:打開(kāi)VS2010,兩種途經(jīng)建立dll項(xiàng)目,基于MFC DLL的和基于Win32控制臺(tái)應(yīng)用程序的,這里選擇基于Win32控制臺(tái)建立。
a.文件--新建--項(xiàng)目(項(xiàng)目命名為myAPI)--Visual C++ --Win32--選擇Win32控制臺(tái)應(yīng)用程序;
b.接下來(lái)下一步一直到如下圖,程序類型選擇DLL,如無(wú)特殊需要選擇空項(xiàng)目完成,項(xiàng)目建立完畢;
2.定義頭文件:為項(xiàng)目添加頭文件myAPI.h 內(nèi)部添加如下代碼,
#ifndef _DLL_API #define _DLL_API _declspec(dllexport) #else #define _DLL_API _declspec(dllimport) #endif _DLL_API int ADD(int a,int b);
內(nèi)部定義一個(gè)ADD()函數(shù)接口,如需添加其他函數(shù)接口,可以接著繼續(xù)定義,如
_DLL_API int MINUS(int a,int b); _DLL_API int otherfunc(int,int,int);
3.定義源文件:為項(xiàng)目添加相應(yīng)的源文件myAPI.cpp 之后便是在該源文件中對(duì)函數(shù)進(jìn)行定義,內(nèi)部添加如下代碼,
#include "myAPI.h" int ADD(int a,int b){ return a+b; }
4.編譯至通過(guò),生成dll:這里有個(gè)小建議,因?yàn)閐ll項(xiàng)目不會(huì)生成exe,無(wú)法實(shí)時(shí)測(cè)試API,所以建議先在一般空項(xiàng)目?jī)?nèi)調(diào)試并測(cè)試通過(guò)API的函數(shù)體代碼,然后再建立dll項(xiàng)目直接編譯通過(guò),這樣更方便可靠。 回到正題,dll項(xiàng)目編譯通過(guò)后有用的就是myAPI.h頭文件以及Debug目錄下新生成的myAPI.dll 和myAPI.lib文件,
5.調(diào)用dll:為了測(cè)試我們剛剛生成的dll,創(chuàng)建新的項(xiàng)目mytest。包含聲明myAPI.h頭文件,這里存放了定義的接口。將myAPI.dll文件放入新工程Debug文件夾下(.exe執(zhí)行時(shí)需要調(diào)用,新項(xiàng)目如未編譯則沒(méi)有Debug文件夾,待編譯后有了該文件夾再將dll文件放入)。將myAPI.lib文件放在與源文件及頭文件相同路徑下(編譯時(shí)需要),接下來(lái)需要將.lib資源添加到項(xiàng)目中,兩種方法。
一種方法是,在項(xiàng)目屬性-鏈接器-輸入中“附加依賴項(xiàng)”加入myAPI.lib文件(當(dāng)然,有過(guò)未設(shè)置此處亦編譯成功的經(jīng)歷,但不建議);
另一種調(diào)用方法是在新項(xiàng)目主程序中添加如下命令 則無(wú)需設(shè)置依賴項(xiàng);
#pragma comment(lib,"myAPI.lib")
至此,全部完成任務(wù),編譯通過(guò)后正常使用你自己定義的API了~
VS2010中使用CL快速 生成DLL的方法
方案一:
1、命令行中輸入cl example.cpp,生成example.obj和example.lib文件。有可能還會(huì)提示“沒(méi)有入口點(diǎn)”的錯(cuò)誤。這是因?yàn)槲覀兊腃PP中是要生成dll文件的,并沒(méi)有main()這樣的主函數(shù)作為入口點(diǎn)。如果是C文件,則輸入cl /c example.cpp
2、命令行中輸入cl /def:example.def /dll:example.obj
方案二:
命令行中輸入 cl /LD example.cpp example.def,直接生成example.dll(名字會(huì)因在def中定義的不同而有所不同)文件。有可能會(huì)提示(warning LNK4070: .EXP 中的 /OUT:example.dll 指令與輸出文件名“example.exe”不同;忽略指令),這時(shí)生成的可能是example.exe文件。只要將example.exe改成example.dll就可以了,或者直接在加載dll的函數(shù)中加載example.exe.
注意:/LD一定要大寫,不能寫成/ld,這里可折騰了我快一天了才找出來(lái)的原因。
vs2010 問(wèn)題 >LINK : fatal error LNK1123: 轉(zhuǎn)換到 COFF 期間失敗: 文件無(wú)效或損壞
>LINK : fatal error LNK1123: 轉(zhuǎn)換到 COFF 期間失敗: 文件無(wú)效或損壞
問(wèn)題說(shuō)明:當(dāng)安裝VS2012之后,原來(lái)的.NET 4.0會(huì)被替換為.NET 4.5。卸載VS2012時(shí),不會(huì)恢復(fù).NET 4.0。
l 當(dāng)VS2012安裝后,VS2010的cvtres.exe就無(wú)法使用了。如果你的PATH環(huán)境變量中VS2010的工具路徑第一個(gè)出現(xiàn),而且鏈接器需要將.res文件轉(zhuǎn)換為COFF 對(duì)象格式,就會(huì)導(dǎo)致LNK1123錯(cuò)誤。
l 當(dāng)VS生成PE文件頭時(shí),使用的cvtres.exe版本錯(cuò)誤,不能與當(dāng)前的.NET平臺(tái)兼容。
解決方案:
參考:
http://stackoverflow.com/questions/10888391/link-fatal-error-lnk1123-failure-during-conversion-to-coff-file-invalid-or-c
因?yàn)槭莄vtres.exe版本錯(cuò)誤導(dǎo)致的結(jié)果,所以凡是能使VS鏈接器找到正確的cvtres.exe版本的方法都可以解決該問(wèn)題?;蛘呤筕S鏈接器不生成COFF的方法都可以。
【方法一】
當(dāng)前系統(tǒng)中存在兩個(gè)cvtres.exe文件,版本不同。讓VS2010使用.NET 4.5的cvtres.exe程序。
具體步驟:
重命名或刪除:(vs2010安裝的位置)C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exe
這樣C:\Windows\Microsoft.NET\Framework\v4.0.30319 (.NET 4.5)中的cvtres.exe文件就可以被VS2010使用。
【方法二】
解決方法如下:
項(xiàng)目\屬性\配置屬性\清單工具\(yùn)輸入和輸出\嵌入清單:原來(lái)是“是”,改成“否”。
說(shuō)明:這種方法每個(gè)工程均需要修改配置。
【方法三】
安裝:VS2010 SP1. 該版本應(yīng)該是能使用.NET 4.5的,并配有正確的cvtres.exe版本。
注意:安裝VS 2010 SP1 時(shí)會(huì)移除64-bit 編譯器. 通過(guò)安裝 VS 2010 SP1 compiler pack 能夠重新獲得。
【方法四】
卸載.NET 4.5,重裝.NET 4.0
您可能感興趣的文章
- 01-10WinForm實(shí)現(xiàn)仿視頻播放器左下角滾動(dòng)新聞效果的方法
- 01-10C#實(shí)現(xiàn)多線程下載文件的方法
- 01-10WinForm實(shí)現(xiàn)自定義右下角提示效果的方法
- 01-10Winform消除button按下出現(xiàn)的虛線簡(jiǎn)單實(shí)現(xiàn)方法
- 01-10C#獲取動(dòng)態(tài)生成的CheckBox值
- 01-10C#日歷樣式的下拉式計(jì)算器實(shí)例講解
- 01-10基于C#實(shí)現(xiàn)簡(jiǎn)單離線注冊(cè)碼生成與驗(yàn)證
- 01-10實(shí)現(xiàn)ASP.NET無(wú)刷新下載并提示下載完成的開(kāi)發(fā)思路
- 01-10C#編程和Visual Studio使用技巧(下)
- 01-10C#中的 == 和equals()區(qū)別淺析


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹(shù)的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 01-10C#通過(guò)反射獲取當(dāng)前工程中所有窗體并
- 01-10關(guān)于ASP網(wǎng)頁(yè)無(wú)法打開(kāi)的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#實(shí)現(xiàn)txt定位指定行完整實(shí)例
- 01-10WinForm實(shí)現(xiàn)仿視頻播放器左下角滾動(dòng)新
- 01-10C#停止線程的方法
- 01-10C#實(shí)現(xiàn)清空回收站的方法
- 01-10C#通過(guò)重寫Panel改變邊框顏色與寬度的
- 01-10C#實(shí)現(xiàn)讀取注冊(cè)表監(jiān)控當(dāng)前操作系統(tǒng)已
隨機(jī)閱讀
- 01-11Mac OSX 打開(kāi)原生自帶讀寫NTFS功能(圖文
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 01-10delphi制作wav文件的方法
- 01-10C#中split用法實(shí)例總結(jié)
- 01-10SublimeText編譯C開(kāi)發(fā)環(huán)境設(shè)置
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 04-02jquery與jsp,用jquery
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什