一江春水向東流

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

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

          開發(fā)環(huán)境是DEV C++,采用C語言編寫
          創(chuàng)建一個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文件中指定輸出的函數(shù),編譯生成了hello.dll文件

          DLL調(diào)用部分
          dllcall.c
          #include <windows.h>
          #include <stdio.h>
          #include <stdlib.h>

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

          編譯執(zhí)行

          ?

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

          評論

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

          主站蜘蛛池模板: 谷城县| 盘锦市| 祁门县| 建始县| 高安市| 东乌珠穆沁旗| 应城市| 攀枝花市| 广昌县| 桂林市| 安仁县| 云南省| 平利县| 顺义区| 东光县| 乐清市| 五常市| 社会| 类乌齐县| 香港| 嘉义市| 青铜峡市| 秦安县| 英山县| 徐汇区| 白沙| 京山县| 乌海市| 黔江区| 嵊州市| 西昌市| 灵丘县| 沅陵县| 昭通市| 大港区| 泰兴市| 天台县| 溆浦县| 高州市| 大新县| 中牟县|