找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 11481|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

VC++學(xué)習(xí)之---MFC程序與調(diào)用DLL文件

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:71477 發(fā)表于 2015-1-1 18:34 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
MFC編寫dll與調(diào)用

1、dll的新建和編寫

     用vc++ 2008新建MFC ->MFCDLL,在向?qū)е羞x擇 “使用共享 MFC DLL的規(guī)則 DLL”,然后點(diǎn)擊
完成就新建了一個(gè)dll文件工程。

打開 .cpp文件,編寫自己需要的函數(shù)或子程序。

例如:函數(shù)聲明可以放到.h里面,就像平時(shí)C語言工程一樣
int shaoAdd(int a,int b)
{
  int c;
  c=a+b;
  return c;
}
然后打開 .def文件,在“EXPORTS下面加入自己要對(duì)外公開的函數(shù)

    例如:
EXPORTS
    ; Explicit exports can go here
    DllCanUnloadNow PRIVATE   //默認(rèn)自帶   
    DllGetClassObject PRIVATE //默認(rèn)自帶
    DllRegisterServer PRIVATE //默認(rèn)自帶
    shaoAdd   PUBLIC  //自定義的函數(shù),只要名字即可

之后編譯,到這里就完成了dll文件的編寫、公開、編譯。
2、dll文件的調(diào)用
新建一個(gè) MFC 應(yīng)用程序項(xiàng)目,在需要調(diào)用dll的 .cpp文件中輸入一下代碼 :
            #pragma   comment(lib,"dll文件的lib文件名");
             __declspec( dllimport ) dll文件中的函數(shù)申明;
    例:    #pragma   comment(lib,"test.lib");
            __declspec( dllimport ) int shaoAdd(int a,int b);
//注意,雖然這里是lib文件,但是生產(chǎn)exe后,只把test.dll文件放到exe目錄下就行。不需要test.lib文件
之后把dll工程中編譯好的 .dll 和 .lib 文件復(fù)制到調(diào)用dll程序的源文件目錄,最后就能在調(diào)用dll的源程序中使用dll中的函數(shù)!
例如:在對(duì)話框按鈕事件中使用
void CMyDlg::OnButton5()
{
    m_edit2.SetSel(0,-1,FALSE);
    m_edit2.Copy();
    MessageBox("內(nèi)容已復(fù)制!!!");
    if (shaoAdd(10,20)==30)
    {
        MessageBox("DLL調(diào)用成功!!!");
    }
}
最后編譯你的工程,生產(chǎn)exe文件即可。

使用時(shí),要把exe文件和dll文件放到一個(gè)目錄下,即可使用,否則會(huì)報(bào)錯(cuò).

備注:DLL文件內(nèi)如果使用到MFC庫(kù)的時(shí)候,最好在每個(gè)自定義函數(shù)體內(nèi)都加上
      "AFX_MANAGE_STATE(AfxGetStaticModuleState());"

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表