中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

VS2010 C++創建、調(diao)用DLL圖解

      以前(qian)做(zuo)Java,這(zhe)一段在搗鼓一個C++的(de)項目,需要調(diao)用其他(ta)項目組做(zuo)的(de)DLL文件,現(xian)將創建和調(diao)用DLL的(de)方法和步驟記(ji)錄如下。

 

  一、創建DLL

        1、新(xin)建(jian)項(xiang)(xiang)目(mu): Visual C++ -> Win32項(xiang)(xiang)目(mu),名稱:CnBlogsDLL

點擊完成,進入下一步。

注意不要點完(wan)了按(an)鈕,點擊下一步。

選中DLL單選框(kuang),然后(hou)點擊完(wan)成。這樣DLL項目的創(chuang)建工(gong)作就基本結束了(le)。

        2、新建頭文件(jian):CommStruts.h

#pragma once

// 學生構造(zao)體
typedef struct {
// 學生(sheng)名稱
char Name[8];
// 學(xue)生年(nian)齢
int Age;
} Student;

        3,新建源文(wen)件:ShowStudentInfo.cpp

#include "StdAfx.h"
#include <iostream>
#include " CommStruts.h "

using namespace std;

// 輸(shu)出學(xue)生信息
int ShowStudentInfo(Student * stud){
// 輸出學生(sheng)姓名
cout<<"Name : "<<stud->Name<<endl;
// 輸出學生年(nian)齡
cout<<"Age : "<<stud->Age<<endl;
// 返(fan)回學(xue)生年齡
return stud->Age;
}

&nbsp; ;      4、新建模塊定(ding)義文件:

點擊(ji)追加,然后輸入如下(xia)代碼:

LIBRARY CnBlogsDll
EXPORTS

ShowStudentInfo

LIBRARY是模(mo)塊(kuai)定(ding)義文件(jian)(jian)(jian)必須(xu)的(de)一(yi)(yi)部(bu)分(fen)(fen),它告訴鏈接器(linker)如何命名你的(de)DLL。EXPORTS也(ye)是模(mo)塊(kuai)定(ding)義文件(jian)(jian)(jian)必須(xu)的(de)一(yi)(yi)部(bu)分(fen)(fen),這部(bu)分(fen)(fen)使得該函(han)數(shu)可(ke)以被其(qi)它應(ying)用(yong)(yong)程序(xu)(xu)訪問到并且它創(chuang)建一(yi)(yi)個(ge)導(dao)(dao)(dao)入庫。當你生成這個(ge)項目時,不僅是一(yi)(yi)個(ge).dll文件(jian)(jian)(jian)被創(chuang)建,而且一(yi)(yi)個(ge)文件(jian)(jian)(jian)擴展名為.lib的(de)導(dao)(dao)(dao)出(chu)庫也(ye)會被創(chuang)建。EXPORTS后面列出(chu)要導(dao)(dao)(dao)出(chu)函(han)數(shu)的(de)名稱。可(ke)以在.def文件(jian)(jian)(jian)中(zhong)的(de)導(dao)(dao)(dao)出(chu)函(han)數(shu)名后加@n,表示要導(dao)(dao)(dao)出(chu)函(han)數(shu)的(de)序(xu)(xu)號為n(在進(jin)行函(han)數(shu)調用(yong)(yong)時,這個(ge)序(xu)(xu)號將發(fa)揮其(qi)作用(yong)(yong))。

    &nbsp;   5、最后編譯,生成CnBlogsDLL.dll和CnBlogsDLL.lib文件 

 

  二、調用DLL

        1、創(chuang)建CLR控制臺應用程序:ExecutDll。

當(dang)然,創建(jian)其他的應用程序(xu)也是可(ke)以的,這里(li)只是舉(ju)例(li)說(shuo)明(ming)。

  &nbsp;     2、添加已(yi)有項目CommStruts.h,此文件是上面個創(chuang)建DLL是建立的構造體文件。

        3、在main方法中添加如下(xia)代碼:

// 加載DLL
HINSTANCE hInstance = LoadLibrary("CnBlogsDLL.dll");
// 定義顯示(shi)學生信息的方法
typedef int (*ShowStudentInfo)(Student * );

// 取得DLL中先(xian)生學(xue)生信息(xi)的方(fang)法,并(bing)映射成本地的方(fang)法
ShowStudentInfo showStudentInfo = (ShowStudentInfo)GetProcAddress(hInstance, "ShowStudentInfo");
// 創建學生信息
Student stud;
// 初始化
memset(&stud, 0x00, sizeof(Student));
stud.Age = 100;
memcpy(stud.Name,"WGC",sizeof(stud.Name));

// 執(zhi)行顯示學生信息的方法
int age = showStudentInfo(&stud);

            這(zhe)里(li)使用的是動態(tai)加(jia)載DLL的方法。

        4、將編譯完成的(de)CnBlogsDLL.dll拷貝到ExecutDll工(gong)程的(de)Debug目錄下。如果使(shi)用靜態加載(zai)DLL的(de)方法,還需要拷貝CnBlogsDLL.lib文件。

        5、編譯運(yun)行。運(yun)行結(jie)構如下圖:

 

  三、小結

        調用DLL的(de)時候,有(you)(you)可能會出現"FatalExecutionEngineError"的(de)錯(cuo)誤,極(ji)有(you)(you)可能是(shi)參數造成的(de),尤其(qi)是(shi)使用指(zhi)針(zhen)的(de)時候,更需要多加小心。

        這里(li)只(zhi)是簡單的介紹了創建(jian)和調(diao)用DLL的部分內容。希望能對DLL初(chu)學者有所幫組。

 

 

posted @ 2012-03-14 17:16  孤旅者  閱讀(48503)  評論(17)    收藏  舉報