一江春水向東流

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

            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  回復  更多評論
            

          主站蜘蛛池模板: 右玉县| 塔河县| 肥城市| 阿巴嘎旗| 江安县| 花莲县| 七台河市| 漳平市| 郸城县| 桂平市| 张家界市| 临猗县| 楚雄市| 潮安县| 泰和县| 崇信县| 德昌县| 周宁县| 肃宁县| 京山县| 长沙市| 秦安县| 建阳市| 万源市| 太谷县| 祁门县| 若羌县| 勃利县| 荔浦县| 贵定县| 隆德县| 宁武县| 韶山市| 西华县| 罗甸县| 夏邑县| 江阴市| 长治县| 富平县| 乐都县| 昭觉县|