以前做Java,這一段在搗鼓一個C++的項目,需要調用其他項目組做的DLL文件,現將創建和調用DLL的方法和步驟記錄如下。
一、創建DLL
1、新建項目: Visual C++ -> Win32項目,名稱:CnBlogsDLL

點擊完成,進入下一步。

注意不要點完了按鈕,點擊下一步。

選中DLL單選框,然后點擊完成。這樣DLL項目的創建工作就基本結束了。
2、新建頭文件:CommStruts.h
#pragma once
// 學生構造體
typedef struct {
// 學生名稱
char Name[8];
// 學生年齢
int Age;
} Student;
3,新建源文件:ShowStudentInfo.cpp
#include "StdAfx.h"
#include <iostream>
#include " CommStruts.h "
using namespace std;
// 輸出學生信息
int ShowStudentInfo(Student * stud){
// 輸出學生姓名
cout<<"Name : "<<stud->Name<<endl;
// 輸出學生年齡
cout<<"Age : "<<stud->Age<<endl;
// 返回學生年齡
return stud->Age;
}
4、新建模塊定義文件:

點擊追加,然后輸入如下代碼:
LIBRARY CnBlogsDll
EXPORTS
ShowStudentInfo
LIBRARY是模塊定義文件必須的一部分,它告訴鏈接器(linker)如何命名你的DLL。EXPORTS也是模塊定義文件必須的一部分,這部分使得該函數可以被其它應用程序訪問到並且它創建一個導入庫。當你生成這個項目時,不僅是一個.dll文件被創建,而且一個文件擴展名為.lib的導出庫也會被創建。EXPORTS后面列出要導出函數的名稱。可以在.def文件中的導出函數名后加@n,表示要導出函數的序號為n(在進行函數調用時,這個序號將發揮其作用)。
5、最后編譯,生成CnBlogsDLL.dll和CnBlogsDLL.lib文件
二、調用DLL
1、創建CLR控制台應用程序:ExecutDll。

當然,創建其他的應用程序也是可以的,這里只是舉例說明。
2、添加已有項目CommStruts.h,此文件是上面個創建DLL是建立的構造體文件。
3、在main方法中添加如下代碼:
// 加載DLL
HINSTANCE hInstance = LoadLibrary("CnBlogsDLL.dll");
// 定義顯示學生信息的方法
typedef int (*ShowStudentInfo)(Student * );
// 取得DLL中先生學生信息的方法,並映射成本地的方法
ShowStudentInfo showStudentInfo = (ShowStudentInfo)GetProcAddress(hInstance, "ShowStudentInfo");
// 創建學生信息
Student stud;
// 初始化
memset(&stud, 0x00, sizeof(Student));
stud.Age = 100;
memcpy(stud.Name,"WGC",sizeof(stud.Name));
// 執行顯示學生信息的方法
int age = showStudentInfo(&stud);
這里使用的是動態加載DLL的方法。
4、將編譯完成的CnBlogsDLL.dll拷貝到ExecutDll工程的Debug目錄下。如果使用靜態加載DLL的方法,還需要拷貝CnBlogsDLL.lib文件。
5、編譯運行。運行結構如下圖:

三、小結
調用DLL的時候,有可能會出現"FatalExecutionEngineError"的錯誤,極有可能是參數造成的,尤其是使用指針的時候,更需要多加小心。
這里只是簡單的介紹了創建和調用DLL的部分內容。希望能對DLL初學者有所幫組。
