文章編號: 824480 - 上次校閱: 2006年1月5日 - 版次: 2.0

"注意: HRESULT 的-0x80010106"當您在 Visual Studio.NET 中執行受管理的 Visual C++ 應用程式時,就會發生錯誤

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。

在此頁中

全部展開 | 全部摺疊

徵狀

當想執行 Managed C + + 應用程式具有元件物件模型 (COM) 初始化主執行緒上您可能會收到下列錯誤訊息在執行階段:
它設定後,HRESULT-0x80010106-不能變更執行緒模式。

發生的原因

在主執行緒上設定公寓狀態不可靠。

解決方案

main 函式不是真正 Managed 的進入點。真實 Managed 的進入點是 C 執行階段程式庫 (CRT) 進入點。如果要解決這個問題,撰寫 Managed 的進入點,並以手動方式初始化 CRT,如下所示:
#define _WIN32_WINNT 0x501
#include <objbase.h>
#include <stdio.h> 

#using <mscorlib.dll>
using namespace System;

extern "C" void mainCRTStartup();

[System::STAThread]
int mymain()  //the new entry point
{
	//Initialize COM
	HRESULT hr = CoInitialize(0);
	
	//Initialize the CRT
	mainCRTStartup();
	//uninit
	CoUninitialize();
	return 0;
}
 

int main()
{
	/*
   Do the application work 
   that you would do in your main thread
   */
}
明確指定要 mymain 函式的進入點。要這麼做,請您執行下列步驟:
  1. 按一下 [專案],然後按一下 [內容]。
  2. 在 [屬性頁] 對話方塊展開 [組態屬性,] 下的 連結器],然後按一下以選取 [進階]。
  3. 進入點] 文字方塊中鍵入 mymain,再按 [確定]

狀況說明

Microsoft 已確認這是在本文開頭所列之 Microsoft 產品中的有錯誤。

其他相關資訊

當任何使用者應用程式啟動之前的時間時,公用語言執行時間必須使用元件物件模型 (COM) 時,通用語言執行階段會呼叫 CoInitializeEx 方法來初始化主執行緒以多執行緒公寓 (MTA)。不過,通用語言執行階段呼叫 CoInitializeEx 方法只能作為必要。公用語言執行時間不是決定性的。通常,需要單一執行緒的公寓 (STA) 對主執行緒的應用程式而是必須套用 STAThread 屬性在進入點。而且,在 C + + 使用者輸入點 (主要的方法和其各種變化) 不是,則為 True 的 Managed 的進入點。C 執行階段程式庫提供進入點的主控台應用程式及視窗應用程式。

重製行為 1 的步驟

  1. 啟動 Microsoft Visual Studio.NET 2003年。
  2. 在 [檔案] 功能表上指向 [新增],然後按一下 [專案]。
  3. 展開 [Visual C++ 專案專案類型] 下,按一下 MFC,然後再按一下 [範本] 下方的 [MFC 應用程式
  4. 在 [名稱] 文字方塊中輸入 MFCTest,並在 [位置] 文字方塊中] 中輸入 C:\ 然後按一下 [確定]
  5. 在 [MFC 應用程式 精靈] 中,按一下 [複合文件支援]。
  6. 在 [複合文件支援,按一下以選取 [容器/完整伺服器,然後按一下 [完成]
  7. 在 [方案總管] 中 MFCTest,] 上按一下滑鼠右鍵,然後按一下 [內容]。
  8. 在 [屬性頁] 對話方塊中,展開 [C/C + + 在 [組態屬性]。
  9. 設定 偵錯資訊格式 屬性設定為 停用]
  10. 展開 [程式碼產生,然後設定下列內容:
    • 基本執行階段檢查] 屬性設定為 [預設值
    • 設定的 啟用最少重建] 屬性設定為 [
  11. 展開 [命令列,然後鍵入 / clr其他選項 的 [文字] 方塊中。
  12. 按一下 [套用],然後再按一下 [確定]
  13. 建置應用程式。
  14. 在 [偵錯] 功能表上按一下 [[開始],以偵錯應用程式]。您可能會收到本文的 < 徵狀 > 一節所述的錯誤訊息。

重製行為 2 的步驟

  1. 啟動 Visual Studio.NET 2003年。
  2. 在 [檔案] 功能表上指向 [新增],然後按一下 [專案]。
  3. 展開 [Visual C++ 專案專案類型] 下,按一下 .NET,然後再按一下 [範本] 下方的 [主控台應用程式 (.NET)
  4. 在 [名稱] 文字方塊中輸入 TestProject,並在 [位置] 文字方塊中] 中輸入 C:\ 然後按一下 [確定]
  5. 在 [方案總管] 中連按兩下 TestProject.cpp,],並再以下列程式碼取代現有的程式碼:
    #include "stdafx.h"
    #define _WIN32_WINNT 0x501 
    #include <objbase.h>
    #include <stdio.h> 
    
    #using <mscorlib.dll>
    using namespace System;
    
    int main()
    
    {
    	HRESULT hr = CoInitialize(0);
    	printf("hr in main thread is %d \n",hr);
    }
  6. 建置,然後再執行該專案。您可能會收到本文的 < 徵狀 > 一節所述之執行階段錯誤。
這個問題也可能會發生在 Managed C + + 應用程式在下列情況下:
  • 當應用程式必須呼叫 CoInitializeEx 方法來初始化主執行緒至 STA。
  • 當您編譯 MFC OLE 基礎應用程式藉由使用 / clr 選項。
  • 當您執行精靈產生 Windows Form 應用程式。

這篇文章中的資訊適用於:
  • Microsoft Visual C++ .NET 2003 Standard Edition
關鍵字:?
kbmt kberrmsg kbthread kbcodegen kbcrt kbappwizard kbbug KB824480 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:824480? (http://support.microsoft.com/kb/824480/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。