一江春水向東流

          做一個有思想的人,期待與每一位熱愛思考的人交流,您的關注是對我最大的支持。

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            44 隨筆 :: 139 文章 :: 81 評論 :: 0 Trackbacks

          開發環境是DEV C++,采用C語言編寫
          創建一個DLL項目,項目名稱hello,DLL編寫采用的是DEV C++中的示例代碼

          頭文件dll.h
          #ifndef _DLL_H_
          #define _DLL_H_

          #if BUILDING_DLL
          # define DLLIMPORT __declspec (dllexport)
          #else /* Not BUILDING_DLL */
          # define DLLIMPORT __declspec (dllimport)
          #endif /* Not BUILDING_DLL */


          DLLIMPORT void HelloWorld (void);


          #endif /* _DLL_H_ */

          C文件
          dllmain.c
          #include <stdio.h>
          #include <stdlib.h>

          DLLIMPORT void HelloWorld ()
          {
          ??? MessageBox (0, "Hello World from DLL!\n", "Hi", MB_ICONINFORMATION);
          }


          BOOL APIENTRY DllMain (HINSTANCE hInst???? /* Library instance handle. */ ,
          ?????????????????????? DWORD reason??????? /* Reason this function is being called. */ ,
          ?????????????????????? LPVOID reserved???? /* Not used. */ )
          {
          ??? switch (reason)
          ??? {
          ????? case DLL_PROCESS_ATTACH:
          ??????? break;

          ????? case DLL_PROCESS_DETACH:
          ??????? break;

          ????? case DLL_THREAD_ATTACH:
          ??????? break;

          ????? case DLL_THREAD_DETACH:
          ??????? break;
          ??? }

          ??? /* Returns TRUE on success, FALSE on failure */
          ??? return TRUE;
          }

          還有要注意的在.def文件中指定輸出的函數,編譯生成了hello.dll文件

          DLL調用部分
          dllcall.c
          #include <windows.h>
          #include <stdio.h>
          #include <stdlib.h>

          HINSTANCE hDLL; //定義DLL包柄
          typedef void ( *func)();??? //定義函數指針原型
          func hello;? //定義函數指針
          int main()
          {
          ?if (hDLL == NULL)
          ??? hDLL=LoadLibrary("hello.dll");??//加載DLL
          ?hello = (func)GetProcAddress(hDLL,"HelloWorld"); //獲取函數指針
          ?hello();
          ?FreeLibrary(hDLL);? //釋放DLL
          ?return 0;
          }

          編譯執行

          ?

          posted on 2009-04-06 13:46 allic 閱讀(2833) 評論(1)  編輯  收藏 所屬分類: C/C++win32

          評論

          # re: win32環境C語言實現最基本的DLL編寫及調用實例,測試通過[原] 2010-01-11 20:25 cyxz
          welcome to visit my blog: http://blog.csdn.net/prsniper  回復  更多評論
            

          主站蜘蛛池模板: 五华县| 阳新县| 贡嘎县| 饶平县| 平陆县| 长岭县| 佳木斯市| 乐安县| 遵义县| 昌都县| 峨眉山市| 甘泉县| 聊城市| 科尔| 宿松县| 阿合奇县| 河间市| 诏安县| 门源| 响水县| 浦县| 哈密市| 涞水县| 高青县| 清镇市| 洛扎县| 会宁县| 威宁| 西丰县| 乐陵市| 莱州市| 太湖县| 文成县| 鹤岗市| 宝山区| 临夏市| 大邑县| 吉安市| 张家川| 新邵县| 宿迁市|