정보: Regsvr32.exe 레지스터 및 COM DLL 등록을 취소합니다 방법

기술 자료 번역 기술 자료 번역
기술 자료: 207132 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

이 페이지에서

요약

이 문서에서는 RegSvr32.exe 프로그램을 등록하는 방법 및 구성 요소 개체 모델(COM) 동적 연결 라이브러리 (DLL) 등록을 취소합니다. 이 정보는 COM DLL을 사용하여 RegSvr32.exe 프로그램을 사용할 때 발생하는 오류를 해결할 수 있습니다.

추가 정보

RegSvr32.exe 이 순서대로 다음 Win32 함수를 호출합니다.
  • OleInitialize
  • DLL을 로드할 수 LoadLibrary
  • DllRegisterServer 또는 DllUnregisterServer
  • FreeLibrary
  • OleUninitialize
가장 자주 LoadLibrary, DllRegisterServer 또는 DllUnregisterServer 함수가 실패하기 때문에 RegSvr32.exe가 실패합니다. LoadLibrary DLL 지정한 경로가 없거나 지정한 경로가 올바르지 않으면 실패할 수 있습니다. 로드하는 동안 DLL의 종속성 중 하나가 충족되는 경우에만; LoadLibrary 또한 실패할 수 있습니다 즉, 종속 DLL을 없거나 지정한 경로에 없는 경우.

참고: Depends.exe를 도구를 사용하여 DLL 종속성을 모두 만족할 여부를 확인합니다. Depends.exe를 사용하여 해당 Microsoft 플랫폼 소프트웨어 개발 키트 (Microsoft Visual Studio와 함께 제공되는 어떤 SDK), 포함되어 있습니다.

DLL 추가 또는 COM 구성 요소에 대해 필요한 레지스트리 항목을 삭제하는 데 필요한 논리를 포함할 DllRegisterServerDllUnregisterServer, 구현해야 합니다. RegSvr32.exe 진입점을 이러한 함수를 찾아 적절히 호출합니다.

참고: Microsoft ATL (액티브 템플릿 라이브러리) 마법사를 사용하여 COM DLL을 만드는 경우 마법사 DllRegisterServerDllUnregisterServer 필요한 코드를 생성합니다.

Microsoft Visual C++를 사용하면 \Platform SDK\Samples\Com\Fundamentals\Async\Server 때 Platform SDK 샘플 참조하십시오.

단계별 예제

다음 샘플에서는 등록하고 COM DLL 등록을 사용할 수 있는 레지스트리 함수를 설명합니다.

RegSvr32.exe 수행합니까 코드를 직접 작성할 수도 있습니다. 이 식별 격리하고 보다 쉽게 오류를 해결하는 데 도움이 됩니다.

등록 또는 등록 취소할 COM DLL을 사용하여 Win32 응용 만들려면 다음과 같이 하십시오.
  1. Visual C++에서 Register 라는 새 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을 등록 취소할 수 있습니다.

참조

자세한 내용은 Microsoft 기술 자료 문서를 보려면 해당 자료의 문서를 참조하십시오.
140346OLE 컨트롤 등록 오류가 원인
141824정보: 일반 원격 OLE 자동화 오류
146219HOWTO: ActiveX 컨트롤 (.ocx) 수동 등록
185599FIX: OleAut32.dll 잘못 미등록 여부

속성

기술 자료: 207132 - 마지막 검토: 2007년 2월 23일 금요일 - 수정: 2.5
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Professional Edition
  • Microsoft Windows 2000 Datacenter Server
  • Microsoft Windows 95
  • Microsoft Windows 98 Standard Edition
  • Microsoft Windows NT Advanced Server 3.1
  • Microsoft Windows NT Server 4.0 Standard Edition
  • Microsoft Windows NT Workstation 4.0 Developer Edition
키워드:?
kbmt kbinfo KB207132 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com