• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            醬壇子

            專注C++技術 在這里寫下自己的學習心得 感悟 和大家討論 共同進步(歡迎批評!!!)

              C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              66 Posts :: 16 Stories :: 236 Comments :: 0 Trackbacks

            公告

            王一偉 湖南商學院畢業 電子信息工程專業

            常用鏈接

            留言簿(19)

            我參與的團隊

            搜索

            •  

            積分與排名

            • 積分 - 387834
            • 排名 - 64

            最新隨筆

            最新評論

            閱讀排行榜

            評論排行榜

            Visual C++
            GetProcAddress
            顯式鏈接到 DLL 的進程調用 GetProcAddress 來獲取 DLL 導出函數的地址。使用返回的函數指針調用 DLL 函數。GetProcAddress 將(由 LoadLibraryAfxLoadLibraryGetModuleHandle 返回的)DLL 模塊句柄和要調用的函數名或函數的導出序號用作參數。

            由于是通過指針調用 DLL 函數并且沒有編譯時類型檢查,需確保函數的參數是正確的,以便不會超出在堆棧上分配的內存和不會導致訪問沖突。幫助提供類型安全的一種方法是查看導出函數的函數原型,并創建函數指針的匹配 typedef。例如:

            typedef UINT (CALLBACK* LPFNDLLFUNC1)(DWORD,UINT);


            HINSTANCE hDLL;               
            // Handle to DLL
            LPFNDLLFUNC1 lpfnDllFunc1;    // Function pointer
            DWORD dwParam1;
            UINT  uParam2
            , uReturnVal;

            hDLL 
            = LoadLibrary("MyDLL");
            if (hDLL != NULL)
            {
               lpfnDllFunc1 
            = (LPFNDLLFUNC1)GetProcAddress(hDLL,
                                                       
            "DLLFunc1");
               
            if (!lpfnDllFunc1)
               {
                  
            // handle the error
                  FreeLibrary(hDLL);
                  
            return SOME_ERROR_CODE;
               }
               
            else
               {
                  
            // call the function
                  uReturnVal = lpfnDllFunc1(dwParam1, uParam2);
               }
            }

            調用 GetProcAddress 時指定所需函數的方式取決于 DLL 的生成方式。

            僅當要鏈接到的 DLL 是用模塊定義 (.def) 文件生成的,并且序號在 DLL 的 .def 文件的 EXPORTS 部分中與函數一起列出時,才能獲取導出序號。如果 DLL 具有許多導出函數,則相對于使用函數名,使用導出序號調用 GetProcAddress 的速度稍快一些,因為導出序號是 DLL 導出表的索引。使用導出序號,GetProcAddress 可直接定位函數,而不是將指定名稱與 DLL 導出表中的函數名進行比較。但是,僅當有權控制 .def 文件中導出函數的序號分配時,才應使用導出序號調用 GetProcAddress

             


            posted on 2007-08-08 23:00 @王一偉 閱讀(5390) 評論(3)  編輯 收藏 引用

            Feedback

            # re: GetProcAddress 2007-08-09 08:58 @王一偉
            我重新寫了上面的代碼 發覺還是有問題dll能導入成功,函數地址能獲取

            但是一旦用typedef的函數指針的時候就連編譯都編譯不過了

            請求幫助

            工程文件如下http://www.shnenglu.com/Files/sunraiing9/hahahah.rar

            11k大小
              回復  更多評論
              

            # re: GetProcAddress 2007-08-09 09:50 @王一偉
            已經解決 嘿嘿  回復  更多評論
              

            # re: GetProcAddress 2010-04-29 17:32 jocy
            3Q
              回復  更多評論
              

            国产精品99久久久久久www| 久久精品无码专区免费| 97久久国产露脸精品国产| 久久久久久久久久久久久久| 亚洲精品无码久久久久去q| 26uuu久久五月天| 国产亚洲精品久久久久秋霞 | 91久久精品91久久性色| 狠狠色伊人久久精品综合网| 久久亚洲sm情趣捆绑调教| 狠狠干狠狠久久| 久久国语露脸国产精品电影| 99久久婷婷国产一区二区 | 国产精品99久久久久久人| 久久久久亚洲AV成人网| 72种姿势欧美久久久久大黄蕉| 蜜桃麻豆WWW久久囤产精品| 国产精品久久亚洲不卡动漫| 久久精品成人欧美大片| 亚洲欧美精品一区久久中文字幕| 久久久青草青青亚洲国产免观| 一本色道久久88精品综合| 久久激情五月丁香伊人| 日本免费一区二区久久人人澡| 蜜臀av性久久久久蜜臀aⅴ| 亚洲伊人久久成综合人影院| 日韩精品无码久久一区二区三| 日韩亚洲欧美久久久www综合网| 亚洲国产精品久久电影欧美| 久久亚洲AV无码精品色午夜麻豆 | 欧美精品久久久久久久自慰| 亚洲欧美国产精品专区久久| 99久久综合狠狠综合久久| 一本久久a久久精品亚洲| 久久综合九色综合久99| 精品久久久无码中文字幕天天| 1000部精品久久久久久久久| 亚洲综合日韩久久成人AV| 人妻无码精品久久亚瑟影视| 丁香色欲久久久久久综合网| 狠狠精品久久久无码中文字幕|