現在オフラインです。再接続するためにインターネットの接続を待っています

情報: Regsvr32.exe を登録し、COM Dll の登録を解除する方法

重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。

英語版 KB:207132
この資料は、アーカイブされました。これは "現状のまま" で提供され、更新されることはありません。
概要
この資料で RegSvr32.exe プログラムが登録し、コンポーネント オブジェクト モデル (COM) のダイナミック リンク ライブラリ (DLL) の登録を解除する方法を説明します。COM DLL が RegSvr32.exe プログラムを使用しようとしたときに発生するエラーのトラブルシューティングを行うには、この情報を使用できます。
詳細
RegSvr32.exe は、次の順序で次の Win32 関数を呼び出します。
  • OleInitialize
  • LoadLibrary DLL を読み込めません
  • DllRegisterServer または DllUnregisterServer
  • FreeLibrary
  • OleUninitialize
多くの場合、RegSvr32.exe は失敗、 LoadLibrary, DllRegisterServer、または DllUnregisterServer 関数は失敗します。LoadLibrary DLL は、指定したパスにない場合、または指定したパスに誤りがある場合は失敗します。 LoadLibrary 読み込もうとしている DLL の依存関係の 1 つでも満たされない場合にも失敗します。つまり、依存する DLL が存在しないか、指定したパスにない場合。

注: すべての DLL の依存関係が満たされているかどうかを確認するのには、Depends.exe ツールを使用できます。Depends.exe は、Microsoft プラットフォーム ソフトウェア開発キット (マイクロソフト Visual Studio が付属 SDK)、付属しています。

DLL に実装する必要があります。 DllRegisterServerDllUnregisterServerを追加または、COM コンポーネントに必要なレジストリ エントリを削除するために必要なロジックが含まれています。RegSvr32.exe これらの関数へのエントリ ポイントを検索し、適切な呼び出しします。

注: Microsoft Active Template Library (ATL) ウィザードを使用して COM DLL を作成する場合は、ウィザードは、必要なコードを生成します。 DllRegisterServerDllUnregisterServer.

Microsoft Visual C を使用すると、プラットフォーム SDK サンプルでは、\Platform SDK\Samples\Com\Fundamentals\Async\Server を参照してください。

ステップ バイ ステップの例

次の例は、レジストリ関数を登録し、COM DLL の登録を解除することができるについて説明します。

RegSvr32.exe の実行内容を行うには、独自のコードを記述することもできます。識別、分離、およびエラーのトラブルシューティングをより簡単にすることができます。

登録または COM DLL を登録解除することができる、Win32 アプリケーションを作成するには、次の手順に従います。
  1. Visual C では、レジスタをという新しい Win32 アプリケーションを作成します。すべての既定値を受け入れます。
  2. Register.cpp、という名前の新しい .cpp ファイルを作成し、それをプロジェクトに追加します。
  3. Register.cpp に次のコードを貼り付けます。
    #include <tchar.h>#include <afxole.h>#include <stdlib.h>#define FAIL_ARGS    1#define FAIL_OLE     2#define FAIL_LOAD    3#define FAIL_ENTRY   4#define FAIL_REG     5 static char szAppName[] = "Register";static char szUsage[] = "\n\nUsage: Register [/u] dllname";static char szDllRegSvr[] = "DllRegisterServer";static char szDllUnregSvr[] = "DllUnregisterServer"; int PASCAL WinMain(		   HINSTANCE hInstance, 		   HINSTANCE hPrev, 		   LPSTR pszCmdLine, 		   int nCmdShow){   	int iReturn = 0;       	HRESULT (FAR STDAPICALLTYPE * lpDllEntryPoint)(void);  	static TCHAR szMsgBuffer[_MAX_PATH*4];         	BOOL bVisualC = FALSE; 	BOOL bSilent = FALSE;  	BOOL bUnregister = FALSE;      	LPSTR pszDllEntryPoint = szDllRegSvr;  	LPSTR pszDllName = NULL;	char szCmdLineCopy[_MAX_PATH]; 	strcpy(szCmdLineCopy, pszCmdLine);             	LPSTR pszTmp = szCmdLineCopy;  	LPSTR pszTok;          		while ((pszTok = strtok(pszTmp, " \t")) != NULL)       	{                                		pszTmp = NULL; 				if ((pszTok[0] == '-') || (pszTok[0] == '/'))		{      			switch (pszTok[1])     			{      			case 'v':      			case 'V':				bVisualC = TRUE;				break;         			case 's':      			case 'S':				bSilent = TRUE;				break;         			case 'u':      			case 'U':				bUnregister = TRUE;				pszDllEntryPoint = szDllUnregSvr;				break;         			default:				wsprintf(szMsgBuffer, 					"Unrecognized flag: %s%s", 					pszTok, 					(LPCSTR)szUsage);				if (!bSilent)  					MessageBox(NULL, 					   szMsgBuffer, 					   szAppName, 					   MB_TASKMODAL | MB_ICONEXCLAMATION);				return FAIL_ARGS;      			}		}		else		{      			if (pszDllName == NULL)				pszDllName = pszTok;   			else   			{				wsprintf(szMsgBuffer, 					"Extra argument on command line: %s%s", 					pszTok, 					(LPCSTR)szUsage);				if (!bSilent)  					MessageBox(NULL, 					   szMsgBuffer, 					   szAppName, 					   MB_TASKMODAL | MB_ICONEXCLAMATION);				return FAIL_ARGS;      			}		}      	}      		if (pszDllName == NULL)        	{		if (!bSilent)		{      			if (bVisualC)  			{				MessageBox(NULL, 				"This command is only valid when "				"an OLE Custom Control project is open.", 				bUnregister ? 				"Unregister Control" : "Register Control",				MB_TASKMODAL | MB_ICONEXCLAMATION);			}			else   			{				wsprintf(szMsgBuffer, 					_T("No DLL name specified%s"), 					(LPCSTR)szUsage);				MessageBox(NULL, 					szMsgBuffer, 					szAppName, 					MB_TASKMODAL | MB_ICONEXCLAMATION);			}		}		return FAIL_ARGS;      	}		if (FAILED(OleInitialize(NULL)))       	{		if (!bSilent)  			MessageBox(NULL, 				"OleInitialize failed.", 				szAppName, 				MB_TASKMODAL | MB_ICONINFORMATION);		return FAIL_OLE;       	}              		HINSTANCE hLib = LoadLibrary(pszDllName);      		if (hLib < (HINSTANCE)HINSTANCE_ERROR) 	{		wsprintf(szMsgBuffer, 			"LoadLibary(\"%s\") failed.", 			pszDllName);		MessageBox(NULL, 			szMsgBuffer, 			szAppName, 			MB_TASKMODAL | MB_ICONEXCLAMATION);		iReturn = FAIL_LOAD;		goto CleanupOle;       	}		(FARPROC&)lpDllEntryPoint = GetProcAddress(hLib, pszDllEntryPoint);		if (lpDllEntryPoint == NULL)   	{#ifdef _WIN32		int nLen = strlen(pszDllName);		if ((nLen > 4) && 			(stricmp(pszDllName + nLen - 4, ".dll") != 0)  && 			(stricmp(pszDllName + nLen - 4, ".ocx") != 0))		{      			wsprintf(szMsgBuffer, 			"%s was loaded, but the %s entry point "			"was not found. %s does not appear to be "			"an .DLL or .OCX file.", 			pszDllName, 			pszDllEntryPoint, 			pszDllName);		}		else		{      			wsprintf(szMsgBuffer, 			"%s was loaded, but the %s entry point "			"was not found. %s may not be exported, "			"or a corrupt version may be in memory.  "			"Consider using PView to detect and remove it.",			pszDllName, 			pszDllEntryPoint, 			pszDllEntryPoint);		}#else		wsprintf(szMsgBuffer, 		"%s was loaded, but the %s entry point "		"was not found. %s may not be exported, "		"or a corrupt version may be in memory.  "		"Consider using WPS to detect and remove it.",		pszDllName, 		pszDllEntryPoint, 		pszDllEntryPoint);#endif				if (!bSilent)  			MessageBox(NULL, 				szMsgBuffer, 				szAppName, 				MB_TASKMODAL | MB_ICONEXCLAMATION);		iReturn = FAIL_ENTRY;				goto CleanupLibrary;   	}		if (FAILED((*lpDllEntryPoint)()))      	{		wsprintf(szMsgBuffer, 			"%s in %s failed.", 			pszDllEntryPoint, 			pszDllName);				if (!bSilent)  			MessageBox(NULL, 				szMsgBuffer, 				szAppName, 				MB_TASKMODAL | MB_ICONEXCLAMATION);		iReturn = FAIL_REG;				goto CleanupLibrary;   	}      		wsprintf(szMsgBuffer,		"%s in %s succeeded.", 		pszDllEntryPoint, 		pszDllName);     		if (! bSilent)		MessageBox(NULL, 			szMsgBuffer, 			szAppName, 			MB_TASKMODAL | MB_ICONINFORMATION); CleanupLibrary:     	FreeLibrary(hLib); 	CleanupOle: 	OleUninitialize();     		return iReturn;}					
  4. アプリケーションをビルドし、これを登録または COM DLL を登録解除します。
関連情報
詳細については、マイクロソフト サポート技術記事を表示するのには以下の記事番号をクリックしてください。
140346 OLE コントロール登録エラーの考えられる理由
141824 一般的なリモート OLE オートメーション エラーの情報:
146219 [Howto]: は、ActiveX コントロール (.ocx ファイル) を手動で登録します。
185599 FIX OleAut32.dll が正しく登録されていないです。

警告: この記事は自動翻訳されています

プロパティ

文書番号:207132 - 最終更新日: 12/05/2015 10:45:20 - リビジョン: 4.0

  • kbnosurvey kbarchive kbinfo kbmt KB207132 KbMtja
フィードバック