c# - 如何在 .NET 中使用来自 VB6 dll 的方法?
问题描述
我有 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)
我已经尝试清理解决方案,关闭项目选项中的清单,创建新的清单文件,但它并没有帮助我......
解决方案
找到解决方案,其他人会觉得有用,(这在我的情况下有效):
创建 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
注册 ActiveX dll
2.1 以管理员身份运行CMD
2.2 运行——
regsvr32.exe C:\path_to_old.dll
在 c# 项目中添加对转换后的 dll(“new.dll”)的引用
我曾经在注册“old.dll”之前添加“new.dll”引用,并且出现以下异常
由于以下错误,检索具有 CLSID {F2D4F4E5-EEA1-46FF-A83B-A270C92DAE4B} 的组件的 COM 类工厂失败:80040154 未注册类(HRESULT 异常:0x80040154 (REGDB_E_CLASSNOTREG))
清洁溶液,删除参考并遵循步骤 2,3 - 帮助
您可能还会发现这篇文章很有用
推荐阅读
- javascript - 当有多个方法时,return 语句中的操作顺序是什么?
- python - 为什么我不能向 Django 中的对象添加多对多关系?
- swift - api返回的数据总是nil?
- c++ - 在 z 之后循环回到字母表的开头
- c - 将函数传递给函数 C
- linux - 为什么用户可以使用 passwd 更改他们的密码,即使他们不能直接写入 /etc/shadow 文件?
- javafx - 如何在 JavaFX 中获取详细的打印机信息
- javascript - 仅在输入两个或更多字符时触发 AJAX
- python - Numpy 的按位与对矩阵的行为不同错误
- reactjs - 当child是react组件而不是DOM元素时如何调整react.children的onClick事件