一江春水向東流

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

            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 閱讀(2837) 評論(1)  編輯  收藏 所屬分類: C/C++win32

          評論

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

          主站蜘蛛池模板: 五家渠市| 许昌市| 巴马| 景德镇市| 阳原县| 永善县| 和龙市| 新建县| 南川市| 南开区| 凉山| 赣州市| 靖安县| 清丰县| 南部县| 兴文县| 陕西省| 政和县| 墨玉县| 通江县| 图们市| 灌云县| 北票市| 孟州市| 金昌市| 安仁县| 买车| 古蔺县| 巨鹿县| 青田县| 伽师县| 大埔区| 云梦县| 平利县| 阳城县| 将乐县| 六安市| 荣昌县| 金川县| 漳州市| 阳东县|