C# VB6到COM可调用包装的.NET-查找.NET库时出现问题
前提:C# VB6到COM可调用包装的.NET-查找.NET库时出现问题,c#,.net,vb6,com-interop,C#,.net,Vb6,Com Interop,前提: 编写了一个用C#编写的COM可调用包装器(CCW),供VB6代码调用 C#代码必须使用.NET库(第三方) 包装好的C#类可以很好地实例化,正确地引发事件,正确地接受方法调用 问题: VB6代码在运行C#代码时,在C#代码尝试访问上述其他.NET库时出错 流程测试: 已完成C#包装代码 VB6编写的代码,引用COM创建的dll 当C代码试图从自身内部访问.NET库时收到“找不到文件…”错误 将第三方.NET库复制到VB6代码的主文件夹(也复制到system32文件夹)。 仍然
- 编写了一个用C#编写的COM可调用包装器(CCW),供VB6代码调用
- C#代码必须使用.NET库(第三方)
- 包装好的C#类可以很好地实例化,正确地引发事件,正确地接受方法调用
- VB6代码在运行C#代码时,在C#代码尝试访问上述其他.NET库时出错
- 已完成C#包装代码
- VB6编写的代码,引用COM创建的dll
- 当C代码试图从自身内部访问.NET库时收到“找不到文件…”错误
- 将第三方.NET库复制到VB6代码的主文件夹(也复制到system32文件夹)。
- 仍然存在“未找到文件…”错误
- 编写了一个C#Windows窗体测试项目。引用了C#包装的代码。
- 收到与VB6代码相同的错误
- 在C#Windows窗体测试项目中,引用了C#包装代码使用的.NET库。
- 程序运行得很好
- VB6能否调用/使用引用其他第三方.NET库的com可调用包装C#程序
c:\projects\vb6project
c:\projects\c#project
如果项目设置为调试,则第三方库应位于:
c:\projects\c#project\bin\Debug
当您确实要分发应用程序时,请确保所有库都与VB6 exe位于同一目录中。我已经使用了大量第三方库完成了此操作,只要第三方库DLL与C#DLL位于同一目录中,就不会有问题
c:\projects\vb6project
c:\projects\c#project
如果项目设置为调试,则第三方库应位于:
c:\projects\c#project\bin\Debug
当您确实想要分发应用程序时,请确保所有库都与VB6 exe位于同一目录中。这将在某种程度上反映Kris Erickson的答案 首先,为了解决这些问题,我没有使用GAC。假设我的VB6应用程序位于c:\program files\mycompany\vb6app.exe中,我将COM友好的.NET dll(我们称之为net4vb.dll)放在可执行文件所在的文件夹中。然后,我使用/codebase选项使用RegAsm注册该dll。最后,我将正在包装或使用的.NET程序集(我们称之为purenet.dll)也放在该文件夹中 此时,vb6app.exe应无错误地运行
请务必注意,如果您在Visual Studio中选择“注册COM互操作”,则它将覆盖您在上面所做的注册。所以不要使用这个选项。仅针对这一点使用命令行工具。这在某种程度上反映了Kris Erickson的答案 首先,为了解决这些问题,我没有使用GAC。假设我的VB6应用程序位于c:\program files\mycompany\vb6app.exe中,我将COM友好的.NET dll(我们称之为net4vb.dll)放在可执行文件所在的文件夹中。然后,我使用/codebase选项使用RegAsm注册该dll。最后,我将正在包装或使用的.NET程序集(我们称之为purenet.dll)也放在该文件夹中 此时,vb6app.exe应无错误地运行
请务必注意,如果您在Visual Studio中选择“注册COM互操作”,则它将覆盖您在上面所做的注册。所以不要使用这个选项。为此,请仅使用命令行工具。尝试将第三方dll放入GACUse fuslogvw.exe中,以解决程序集解析问题。异常信息可能很有用,而且您可能忘记了“copy local==true”我没有使用第三方.NET库,但当COM和