但是問題出現了,上面講述的步驟很詳細但是在自己運行的時候卻會出現錯誤,於是今天在使用google“vs2012 c++調用dll”時,發現了一篇MSDN上的指南:http://msdn.microsoft.com/zh-cn/library/ms235636.aspx
在這篇指南和之前3篇文章的綜合指引下,筆者完成了在VS2012中編寫DLL並成功調用DLL的例程,下面將這個過程一步一步詳細描述出來:
1、首先,打開VS2012 ,在菜單欄中依次選擇:FILE-->NEW-->Project;
2、在 “新建項目”對話框左邊窗格中,展開“Installed”-->Templates-->VisualC++ -->Win32”從右側窗格中選擇“Win32 Console Application”(有blog說到Win32Project也可以,筆者未嘗試)。
3、在下方窗格“Name”中填寫AddDLL(工程名稱),“Location”中選擇工程的生成目錄,Solution中 為“Create new solution”,“Solution name”中填寫建立的解決方案的名稱“AddDLL” 。確認OK
筆者在此選擇工程名稱和解決方案名稱相同,這樣有時會造成誤導,所以建議新建工程時注意區分名稱。
4、在“win32 application wizard 中“(Win32 應用程序向導)對話框的“概述”頁上,選擇“next 下一步”按鈕。
5、因為需要在這個工程中生成DLL文件,所以需要在右側窗格中勾選 ”Dll選項“,在”Additional Options“中可以選擇
”Precompiled header“和”Security Development Lifecycle(SDL)“選項這樣在生成的”AddDLL.cpp“文本中就會出現”#include "stdafx.h"“字樣
6、選擇”Finish“ 創建結束
下面開始 講述如何向動態鏈接庫中添加類:
- 在菜單欄上:FILE-->NEW-->File,這是會彈出一個對New File話框
- 在左側窗格中選擇Visual C++后,右側窗格內容會發生變化,在右側窗格中選擇”Header File(.h)“然后選擇”Open“
- 出現Header1.h文件,,然后選擇常用菜單欄”Save“按鈕,將其保存為”AddDLL.h“
- 添加下面代碼至”AddDLL.h“文件
#ifdef ADDDLL_EXPORTS
#define ADDDLL_API __declspec(dllexport)
#else
#define ADDDLL_API __declspec(dllimport)
#endif
注:
5.在”AddDLL.h“文本中繼續填寫如下代碼,建立名為”MatFuncs“一個基礎類,這個基礎類中只寫了一個算術運算:兩個整數相加
namespace MathFuncs
class AddDLL
{
public:
// returns a+b
static ADDDLL_EXPORTS_API int Add( int a, int b);
}; // 注意:MathFuncclass聲明這里;不可少
}
然后在“解決方案資源管理器”的“AddDLL”項目中,在“源文件”文件夾中,打開”AddDLL.cpp“文本,
#include "stdafx.h"
using namespace std;
namespace MathFuncs
{
int MathFuncs::Add( int a, int b)
{
return a+b;
}
}
6.在菜單欄中“BUILD -->BUILD Solution (F7)或者Bulid AddDLL“生成解決方案,編譯動態鏈接庫,至此DLL已經生成,生成位置在上面幾篇文章中有詳細講述,就是在工程目錄下的Debug文件夾中
=======================================================================
下面開始創建引用 DLL 的應用程序
引用DLL的程序的工程,可以同編譯動態鏈接庫的工程建立在同一個Solution下,也可以不建立在同一個Solution下,不在同一個solution下的方法見文章在C++中調用DLL中的函數(3)
下面講的是建立在同一個Solution:AddDLL下,在同一個解決方案下時,需要有一個設置,如果不設置,就會導致”Unable to find XXX.DLL“錯誤.
步驟如下:
為了創建一個項目引用你剛剛創建好的DLL,在菜單欄中選擇" 文件>新建>項目"
在左窗格中的“Visual C++”下,選擇“Win32”。
在中間窗格中,選擇“Win32 控制台應用程序”。
在“名稱”框中為項目指定名稱,例如,testDLL。 從“解決方案”旁邊的下拉列表中選擇“添加到解決方案”。 這會將新項目添加到包含 AddDLL.DLL 的同一個解決方案中。 選擇“確定”按鈕。在“Win32 應用程序向導”對話框的“概述”頁上,選擇“下一步”按鈕。
在“應用程序設置”頁上的“應用程序類型”下,選擇“控制台應用程序”。
在“應用程序設置”頁上的“附加選項”下,清除“預編譯頭”復選框。
選擇“完成”按鈕創建項目。
在應用程序中使用類庫的功能
在創建一個控制台應用程序后,一個空的程序已經為你創建好了。 源文件的名稱與之前選擇的名稱相同,名為“tesDLL.cpp”。若要使用您 DLL 中創建的算術例程,必須引用 DLL。 在"Solution Explorer "(解決方案資源管理器)中選擇 testDLL 項目,然后在菜單欄上,選擇Project-->Reference。 在“testDLL Propeities Pages屬性頁”對話框中,展開“Commen Propeities通用屬性”節點,選擇“Framework and Reference 框架和引用”,然后選擇“Add New Reference添加新引用”按鈕。 有關“引用”對話框的更多信息,請參見“<Projectname> 屬性頁”對話框 ->“通用屬性”->“框架和引用”。“添加引用”對話框列出了可以引用的庫。 “項目”選項卡列出了當前解決方案中的所有項目,以及它們包含的所有庫。 在“項目”選項卡上,選中“AddDLL”旁邊的復選框,然后選中“確定”按鈕。若要引用 DLL 的頭文件,必須修改包含的目錄路徑。 為此,請在“Propeities Pages屬性頁”對話框中展開“配置屬性”節點,然后展開“C/C++”節點,並選擇“General常規”。 在“Addentional Include Directories附加包含目錄”旁邊,指定AddDLL.h 頭文件所在位置的路徑。 可以使用相對路徑(例如 ..\AddDLL\),然后選擇“確定”按鈕。現在即可在此應用程序中使用MathFuncs 類。 使用以下代碼替換“testDll.cpp”的內容:
6.通過在菜單欄上一依次選擇“Build --Build testDLL”
下面運行testDLL,需要有一個 比較細微的設置:
確保選擇“testDLl”作為默認項目。 在“解決方案資源管理器”中,選擇testDLL,然后在菜單欄上依次選擇“項目”、“設為啟動項目”。若要運行項目,請在菜單欄上依次選擇“調試”、“開始執行(不調試)”。 控制台輸出結果 7.