BILGI: Nasıl, Regsvr32.exe kaydettirir ve COM DLL kaydını kaldırır.

ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.

Makalenin İngilizcesi aşağıdaki gibidir:207132
Bu makale arşivlenmiştir. "Olduğu gibi" sunulmaktadır ve bundan sonra güncelleştirilmeyecektir.
Özet
Bu makalede, Regsvr32.exe'yi program nasıl kaydeder ve Bileşen Nesne Modeli (COM) dinamik bağlantı kitaplığı (DLL) kaydını siler açıklanır. COM DLL dosyanızın ile Regsvr32.exe'yi programını yüklemeye çalıştığınızda oluşan hatalar giderilir, bu bilgileri kullanabilirsiniz.
Daha fazla bilgi
Regsvr32.exe'yi aşağıdaki Win32 işlevleri bu sırayla arar:
  • Oleınitialize
  • LoadLibrary DLL yüklenemedi
  • DllRegisterServer veya DllUnregisterServer
  • FreeLibrary
  • OleUninitialize
LoadLibrary, DllRegisterServer veya DllUnregisterServer işlevi başarısız olduğundan, genellikle, Regsvr32.exe'yi başarısız olur. Dll DOSYASıNıN belirtilen yolda değilse veya belirtilen yol doğru değilse, LoadLibrary başarısız olabilir. Yüklemeye çalıştığınız DLL'nin bağımlılıklardan biri karşılanmazsa; LoadLibrary de başarısız olabilir baþka bir deyiþle, bağımlı DLL yok veya belirtilen yolda değil.

Not: Tüm bağımlılıkları, DLL dosyasının karşılandığında olup olmadığını denetlemek için Depends.exe aracını kullanabilirsiniz. Depends.exe ile Microsoft Platform Software Development Kit'e (Microsoft Visual Studio ile birlikte gelen SDK), bulunur.

DLL dosyanızın eklemek veya COM bileşeni için gereken kayıt defteri girdilerini silmek gerekli olan mantığı içerir DllRegisterServer ve DllUnregisterServer, uygulamalıdır. Regsvr32.exe'yi bu işlevler girdi noktasına bulur ve bunları uygun şekilde çağırır.

Not: COM DLL oluşturmak için Microsoft Active Template Library (ATL) Sihirbazı'nı kullanırsanız, sihirbaz DllRegisterServer ve DllUnregisterServer için gerekli kodu oluşturur.

Microsoft Visual C++ kullanırsanız, \Platform SDK\Samples\Com\Fundamentals\Async\Server adresindeki Platform SDK örneğe bakın.

Adım adım örnek

Aşağıdaki örnek, COM) DLL dosyasının kaydını kaldırın ve kullanabileceğiniz bir kayıt defteri işlevlerini açıklar.

Ayrıca, Regsvr32.exe'yi yaptıklarını yapmak için kendi kod da yazabilirsiniz. Tanımlar, ayırma ve daha kolay hatalarında sorun giderme yardımcı olur.

Kendi COM) DLL dosyasının kaydını kaldırın ya da kaydetmek için kullanabileceğiniz bir Win32 uygulaması oluşturmak için aşağıdaki adımları gerçekleştirin:
  1. Visual C++ Kaydet adlı yeni bir Win32 uygulaması oluşturun. Tüm Varsayılanları kabul edin.
  2. Register.cpp adlı yeni bir .cpp dosyası oluşturun ve bu projeye ekleyin.
  3. Register.cpp aşağıdaki kodu yapıştırın:
    #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. Uygulama oluşturmak ve kaydetmek için COM) DLL dosyasının kaydını kaldırın kullanın.
Referanslar
Ek bilgi için, Microsoft Bilgi Bankası'ndaki makaleleri görüntülemek üzere aşağıdaki makale numaralarını tıklatın:
140346OLE denetimi kayıt hatasının olası nedenleri
141824BILGI: Ortak uzaktan OLE Otomasyon hatası
146219Nasıl YAPıLıR: bir ActiveX denetimini (.ocx) el ile kaydetme
185599Düzeltme: OleAut32.dll hatalı kayıtsız

Uyarı: Bu makalenin çevirisi otomatik olarak yapılmıştır

Özellikler

Makale No: 207132 - Son İnceleme: 12/05/2015 10:45:25 - Düzeltme: 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

  • kbnosurvey kbarchive kbmt kbinfo KB207132 KbMttr
Geri bildirim