日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

vs2008 C++创建和调用标准DLL

發布時間:2023/12/18 c/c++ 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vs2008 C++创建和调用标准DLL 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
為了共享代碼,需要生成標準的dll,本文將介紹在vs2008 C++生成及調用dll。

一、生成DLL

????生成一個名為FunDll的dll文件,對外函數為addl。

???step1:vs2008 環境下,文件-->新建項目,選擇visual c++,在選擇 “Win32 項目”,鍵入項目名稱,如 FunDll。如圖:

???

點擊下一步,勾選“DLL”和“導出空符號”,單擊“完成”

??

step 2,編寫功能函數

???執行完step1步驟后,在FunDll.h 和FunDll.cpp中會生成一些實例代碼,先把這些注釋掉,同時修改FunDll.h中的預處理宏定義為:

#ifdef FUNDLL_EXPORTS
#define FUNDLL_API extern "C" __declspec(dllexport)
#else
#define FUNDLL_API extern "C" __declspec(dllexport)
#endif

在FunDll.h中聲明add函數,在FunDll.cpp中實現該函數。修改完后代碼如下:

FunDll.h:

[cpp]?view plaincopy
  • //?下列?ifdef?塊是創建使從?DLL?導出更簡單的??
  • //?宏的標準方法。此?DLL?中的所有文件都是用命令行上定義的?FUNDLL_EXPORTS??
  • //?符號編譯的。在使用此?DLL?的??
  • //?任何其他項目上不應定義此符號。這樣,源文件中包含此文件的任何其他項目都會將??
  • //?FUNDLL_API?函數視為是從?DLL?導入的,而此?DLL?則將用此宏定義的??
  • //?符號視為是被導出的。??
  • ??
  • #ifdef?FUNDLL_EXPORTS??
  • #define?FUNDLL_API?extern?"C"?__declspec(dllexport)??
  • #else??
  • #define?FUNDLL_API?extern?"C"?__declspec(dllexport)??
  • #endif??
  • FUNDLL_API?int?_stdcall?add(int?plus1,int?plus2);??
  • FunDll.cpp

    [cpp]?view plaincopy
  • #include?"stdafx.h"??
  • #include?"FunDll.h"??
  • ??
  • int?_stdcall?add(int?plus1,int?plus2)??
  • {??
  • ????int?ret?;??
  • ????ret=plus1+plus2;??
  • ????return?ret;??
  • }??
  • step3:添加 FunDll.def,修改內容為

    [cpp]?view plaincopy
  • LIBRARY?"FunDll"??
  • EXPORTS??
  • ????add??

  • step 4,發布FunDll.dll文件

    二,調用FunDll.dll

    step1,新建C++控制臺程序,項目名稱為TestDll。

    修改TestDll.cpp的代碼為:

    [cpp]?view plaincopy
  • //?TestDll.cpp?:?定義控制臺應用程序的入口點。??
  • //??
  • ??
  • #include?"stdafx.h"??
  • #include???
  • #include???
  • #include???
  • ??
  • //定義MYPROC為指向一個返回值為int型的函數的指針??
  • typedef?int?(__stdcall?*MYPROC)(int?a,int?b);??
  • ??
  • int?_tmain(int?argc,?_TCHAR*?argv[])??
  • {?????
  • ????HINSTANCE?hinstLib;??
  • ????MYPROC?ProcAdd;??
  • ????int?val1,val2,res;??
  • ????val1=4;??
  • ????val2=5;??
  • ????//?Get?a?handle?to?the?DLL?module.??
  • ????hinstLib?=?LoadLibrary(L"FunDll.dll");???
  • ??
  • ????//?If?the?handle?is?valid,?try?to?get?the?function?address.??
  • ????if?(hinstLib?!=?NULL)???
  • ????{???
  • ????????ProcAdd?=?(MYPROC)?GetProcAddress(hinstLib,?"add");???
  • ????????res=(ProcAdd)(val1,val2);??
  • ????????printf("%d\n",res);??
  • ????}??
  • ????????return?0;??
  • }??

  • step2,把FunDll拷貝至TestDll項目文件夾下。

    step3,運行,測試通過。

    總結

    以上是生活随笔為你收集整理的vs2008 C++创建和调用标准DLL的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。