[英]Registering both 32bit and 64bit DLLs
我正在引用這個帖子
我們有完全相同的情況。 具有相同項目的相同CLSID App ID的命名空間擴展Dll 32位和64位。 現在注冊這兩個Dll的工作完美無瑕。 取消注冊會帶來一些錯誤。 第一個取消注冊有效但第二個失敗。 因為我覺得windows(?)認為Dll已經被注銷了......
這兩個Dll是否需要不同的CLSID和/或App ID?
親切的問候,邁克爾
編輯:這是DllUnregisterServer的作用:
STDAPI DllUnregisterServer(void){
_AtlModule.UpdateRegistryAppId(FALSE);
HRESULT hRes2 = _AtlModule.UnregisterServer(TRUE);
if (hRes2 != S_OK)
return hRes2;
AFX_MANAGE_STATE(_afxModuleAddrThis);
if (!COleObjectFactoryEx::UpdateRegistryAll(FALSE))
return ResultFromScode(SELFREG_E_CLASS);
return NOERROR;
}
Windows並不關心 - 它是執行注冊的regsvr32
。 您可以將32位版本的regsvr32
用於32位DLL,將64位版本用於64位DLL。
兩個版本只加載DLL,找到DllRegisterServer()
/ DllUnregisterServer()
入口點,調用它並觀察返回的值。 無論內部是什么,都不是regsvr32
業務。
你的問題是其中一個功能錯誤。 你必須調試這個。 一個好的開始是使用Process Monitor實用程序來觀察執行的注冊表訪問以及它們是否符合您的預期。
從sharptooth的答案中添加更多信息,如果您通過執行regsvr32以編程方式取消注冊您的dll,那么您可能正在調用錯誤的regsvr32文件。 您需要確保從System32
調用regsvr32以取消注冊64位dll和從SysWow64
注冊regsvr32以取消注冊32位版本。 您可以p / Invoke函數GetSystemWow64Directory來檢索SysWow64文件夾位置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.