簡體   English   中英

如何在 .NET 中使用來自 VB6 dll 的方法?

[英]How to use method from VB6 dll in .NET?

我有 ActiveX VB6 DLL(無法訪問其源代碼),並且想調用方法“GetUnitInfo”

我用它來導入它:

[DllImport(@"C:\Users\R\Documents\lab.dll")]
public static extern long GetUnitInfo(String strRequest, String strInfo, String strName);

但我得到一個例外:

無法在 DLL 中找到名為“GetUnitInfo”的入口點

我也嘗試加載它:

Assembly myAssembly ;
myAssembly = Assembly.LoadFile("C:\\Users\\R\\Documents\\lab.dll");

但得到一個例外

該模塊應包含程序集清單。 (來自 HRESULT 的異常:0x80131018)

我已經嘗試清理解決方案,關閉項目選項中的清單,創建新的清單文件,但它並沒有幫助我......

找到解決方案,其他人會覺得有用,(這在我的情況下有效):

  1. 創建 VB6 ActiveX dll 的 .Net 包裝器

    1.1 以管理員身份運行CMD

    1.2 移動到 .NET SDK 文件夾 - cd C:\Program Files\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\ (在我的例子中)。

    1.3 運行 - TlbImp.exe C:\path_to_old.dll /out: new.dll

  2. 注冊 ActiveX dll

2.1 以管理員身份運行CMD

2.2 運行regsvr32.exe C:\path_to_old.dll

  1. 在 c# 項目中添加對轉換后的 dll(“new.dll”)的引用

我曾經在注冊“old.dll”之前添加“new.dll”引用,並得到以下異常

由於以下錯誤,檢索具有 CLSID {F2D4F4E5-EEA1-46FF-A83B-A270C92DAE4B} 的組件的 COM 類工廠失敗:80040154 未注冊類(HRESULT 異常:0x80040154 (REGDB_E_CLASSNOTREG))

清潔溶液,刪除參考並遵循步驟 2,3 - 幫助

您可能還會發現這篇文章很有用

C-Sharp-and-activex-dll

添加對 dll 的引用時出錯:解決方案 tlbimp.exe

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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