首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

VB.NET 引用 32 位 COM 組件報 80040154 錯誤的徹底解決方案

     編輯:程式設計綜合問答

錯誤現象

VB.NET 專案引用第三方 COM DLL,雖然註冊成功且引用正常,但在實例化類時拋出 80040154 (REGDB_E_CLASSNOTREG) 異常。引用屬性顯示路徑指向 obj\Debug\Interop.xxx.dll。

根因定位

核心衝突:目標 DLL 為 32 位,但專案預設編譯為「任何 CPU」(64 位進程),導致無法加載 32 位 COM 組件。

  • 僅在 SysWOW64 下註冊不足夠,64 位進程無法訪問 32 位註冊表視圖
  • Interop.xxx.dll 為自動生成的互操作程序集,位數必須與宿主進程一致

解決步驟

  1. 打開專案屬性 → Compile(編譯) → Advanced Compile Options(高級編譯選項)
  2. 取消勾選 Prefer 32-bit(若存在),或顯式設置 Target CPU = x86
  3. 或在 Configuration Manager(配置管理器) 中新增 x86 平台,並將專案平台設為 x86
  4. 重新生成專案,確認輸出路徑下生成的為 32 位程序集

驗證方法

使用 CorFlags.exe 檢查輸出的 .exe:

CorFlags YourApp.exe
// 輸出應包含 : 32BIT = 1

避坑指南

  • 引用 COM 組件時,嵌入互操作類型 設置為 False 可減少版本衝突
  • 部署時確保目標機同樣以 32 位模式運行(快捷方式屬性 → 兼容性 → 勾選「以 32 位模式運行」)
  • 若必須 64 位運行,需尋找該組件的 64 位版本或使用進程外 COM+ 方案
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved