扒开腿挺进岳湿润的花苞视频|将军边走边挺进她H树林|挺进朋友人妻张婉莹身体|岳脱得精光让我挺进去视频|第一次挺进莹莹的身体里视频|脱岳裙子从后面挺进去视频

新疆軟件開發(fā)

本站首頁 軟件開發(fā) 成功案例 公司新聞 公司簡(jiǎn)介 客服中心 軟件技術(shù) 網(wǎng)站建設(shè)
  您現(xiàn)在的位置: 新疆二域軟件開發(fā)公司 >> 開發(fā)語言 >> 文章正文

將使用GetProcAddress 的代碼從C 導(dǎo)向C++ 時(shí)收到C2564 錯(cuò)誤或C2197 錯(cuò)誤

將使用 GetProcAddress() 的代碼從 C 導(dǎo)向 C++ 時(shí),MS-DOS 的 C++ 編譯器可能會(huì)返回以下錯(cuò)誤信息:
error C2564:formal/actual parameters mismatch in call through pointer to function
32 位編譯器返回的錯(cuò)誤信息是:
error C2197:'int (__stdcall *)(void )' :too many actual parameters
在一個(gè)傳統(tǒng)的 C 應(yīng)用程序中,使用 GetProcAddress() 獲取待調(diào)用函數(shù)的地址,聲明一個(gè) FARPROC 類型的變量,用 GetProcAddress() 返回的值初始化指針,然后通過指針調(diào)用函數(shù),如下所示: void func1(void)
{
   HINSTANCE       hLib;
   FARPROC         lpfnDLLProc;
   UINT            param1 = 1;
   int             param2;

   hLib = LoadLibrary ("dll1.dll");
   if (hLib)
   {
      lpfnDLLProc = GetProcAddress (hLib, "DLLProc");
      (*lpfnDLLProc) (param1, (LPINT)&param2);
      FreeLibrary (hLib);
   }
}
    
不使用 STRICT 編譯時(shí),在 WINDOWS.H 文件中將定義 FARPROC,如下所示: typedef int (CALLBACK* FARPROC)();
    
將上述示例代碼轉(zhuǎn)換為 C++ 后,將出現(xiàn)類型不匹配錯(cuò)誤,這是因?yàn)?C 與 C++ 在解釋函數(shù)聲明中的空括號(hào)方面存在著根本的不同。C 中的函數(shù)聲明方式如下: int (*funcptr)();
    
它聲明一個(gè)參數(shù)數(shù)目未知的函數(shù)。在 C++ 中,這一聲明卻表示一個(gè)不接受任何參數(shù)的函數(shù)。換言之,該語句在 C++ 中等價(jià)于: int (*funcptr)(void);
    
由于存在這一不同,在 C 中使用 FARPROC 類型的指針調(diào)用帶參數(shù)的函數(shù)時(shí),不會(huì)出現(xiàn)任何錯(cuò)誤。在 C++ 中,如果傳遞給 GetProcAddress() 的函數(shù)帶有參數(shù),即會(huì)出現(xiàn)形參/實(shí)參不匹配的錯(cuò)誤,因?yàn)?FARPROC 類型的函數(shù)被定義為不帶參數(shù)的函數(shù),而不是可接受參數(shù)的函數(shù)。

要消除該錯(cuò)誤,請(qǐng)將函數(shù)指針定義為指向具有正確參數(shù)數(shù)目的函數(shù)的指針,然后為 GetProcAddress() 的返回值分配相應(yīng)類型: typedef void (CALLBACK *ULPRET)(UINT,LPINT);

void func1(void)
{
   HINSTANCE       hLib;
   ULPRET          lpfnDLLProc;
   UINT            param1 = 1;
   int             param2;

   hLib = LoadLibrary ("dll1.dll");
   if (hLib)
   {
      lpfnDLLProc = (ULPRET) GetProcAddress (hLib,"DLLProc");
      (*lpfnDLLProc) (param1, (LPINT)&param2);
      FreeLibrary (hLib);
   }
}
    

--------------------------------------------------------------------------------

這篇文章中的信息適用于:
• Microsoft Visual C++ 1.0 專業(yè)版
• Microsoft Visual C++ 2.0 Professional Edition
• Microsoft Visual C++ 2.1
• Microsoft Visual C++ 4.0 標(biāo)準(zhǔn)版
• Microsoft Visual C++ 6.0 Service Pack 5
• Microsoft Visual C++ 5.0 標(biāo)準(zhǔn)版

 

作者:未知 | 文章來源:新疆二域軟件開發(fā) | 更新時(shí)間:2007-10-19 11:48:48

  • 上一篇文章:

  • 下一篇文章:

  • 相關(guān)文章:
    C++基礎(chǔ)知識(shí):結(jié)構(gòu)體數(shù)據(jù)的指針變量
    如何實(shí)現(xiàn)C與C++程序的相互調(diào)用
    在C++中成員函數(shù)如何實(shí)現(xiàn)操作符重載?
    基礎(chǔ)學(xué)習(xí):C++非成員函數(shù)實(shí)現(xiàn)操作符重載
    基礎(chǔ)學(xué)習(xí):C++重載輸入輸出符
    基礎(chǔ)學(xué)習(xí):C++重載下標(biāo)結(jié)算符
    基礎(chǔ)學(xué)習(xí):C++中重載調(diào)用操作符
    基礎(chǔ)學(xué)習(xí):C++重載轉(zhuǎn)換操作符operator (type)
    C++類復(fù)制控制學(xué)習(xí)
    C++類析構(gòu)函數(shù)學(xué)習(xí)
    軟件技術(shù)
    · 開發(fā)語言
    · Java技術(shù)
    · .Net技術(shù)
    · 數(shù)據(jù)庫開發(fā)
    最新文章  
    ·搜集整理的asp.net的驗(yàn)證方
    ·各種FOR循環(huán)結(jié)構(gòu)的整理
    ·軟件項(xiàng)目開發(fā)中應(yīng)該考慮那
    ·搜集整理的javascript sel
    ·軟件開發(fā)中項(xiàng)目經(jīng)理有那些
    ·學(xué)習(xí)如何在Lambda表達(dá)式進(jìn)
    ·C++基礎(chǔ)知識(shí):結(jié)構(gòu)體數(shù)據(jù)的
    ·C#實(shí)現(xiàn)短信發(fā)送程序的例子
    ·sun最近修補(bǔ)了一部分java的
    ·rss定制的另外一種實(shí)現(xiàn)方式
    ·delphi實(shí)現(xiàn)利用arp欺騙來實(shí)
    ·基礎(chǔ)學(xué)習(xí):基于WF的流程框
    ·網(wǎng)絡(luò)編程中怎樣得知一次數(shù)
    ·如何逆序輸出單鏈表?
    ·軟件開發(fā)過程中的性能設(shè)計(jì)
    關(guān)于我們 | 軟件開發(fā) | 下載試用 | 客服中心 | 聯(lián)系我們 | 友情鏈接 | 網(wǎng)站地圖 | 新疆電子地圖 | RSS訂閱
    版權(quán)所有 © 2016 新疆二域軟件開發(fā)網(wǎng) m.jdtbank.com All Rights Reserved 新ICP備14003571號(hào)
    新疆軟件開發(fā)總機(jī):0991-4842803、4811639.
    客服QQ:596589785 ;地址:新疆烏魯木齊北京中路華聯(lián)大廈A-5C 郵編:830000
     
    南丰县| 郧西县| 延川县| 苗栗市| 徐水县| 道孚县| 淮阳县| 元氏县| 普格县| 罗定市| 通榆县| 陆河县| 枞阳县| 桐乡市| 石泉县| 乌拉特中旗| 新平| 内黄县| 东丽区| 大悟县| 来宾市| 马龙县| 合水县| 昌平区| 黑龙江省| 鹤山市| 汝阳县| 迭部县| 二手房| 克拉玛依市| 安平县| 石景山区| 呈贡县| 广元市| 明光市| 都江堰市| 林州市| 邯郸县| 淮阳县| 石嘴山市| 叙永县|