我具有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)
我试图清理解决方案,关闭项目选项中的清单,创建新的清单文件,但这并没有帮助我...
答案 0 :(得分:5)
找到了解决方案,mb其他人也会发现有用的方法(在我的情况下有效)
创建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-帮助
您可能还会发现这篇文章有用