簡體   English   中英

注冊32位和64位DLL

[英]Registering both 32bit and 64bit DLLs

我正在引用這個帖子

如何安裝COM DLL的32位和64位版本並“自動選擇”?

我們有完全相同的情況。 具有相同項目的相同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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM