【问题标题】:800a0035 Error with Net-COM Interop800a0035 Net-COM 互操作错误
【发布时间】:2013-06-07 17:46:33
【问题描述】:

我有一个 C# 应用程序需要使用一个用 VB6 编写的 COM 类。应用程序必须使用动态绑定,因为它必须能够根据用户选择的版本(即 DLL)使用不同版本的代码。程序支持的方式是先检测注册表中的所有版本,然后让用户选择。

代码在我的机器和我的同行评审者的机器上运行,但引用 COM 类的代码对于执行质量保证 (QA) 的人来说是崩溃的。

我在代码中放置了一个消息框来显示错误,这就是 QAer 得到的:

我发现“FILENOTFOUND”部分特别令人困惑,因为我知道 DLL 存在于她的机器上。事实上,她通过在 DLL 上使用右键单击注册实用程序,亲自在她的机器上注册了 DLL;这与我使用的实用程序相同。

然后我做了一些进一步的调查,以确定究竟是哪条线路崩溃了。这是用有问题的行实例化 COM 类的代码 :

//Constructor for HtmlRtfConvProxy
public HtmlRtfConvProxy(String convWrapperProj) {
    convUtilType = Type.GetTypeFromProgID(convWrapperProj + "." + WRAPPER_CLASS_NAME);
    if(convUtilType == null) {
        throw new ArgumentException("Unable to find COM class");
    }
    //The following line is crashing for the person doing QA
    vbTargetObject = Activator.CreateInstance(convUtilType);
    if(vbTargetObject == null) {
        throw new ExternalException("Unable to instantiate COM class");
    }
}

我发现更令人困惑的是哪条线路崩溃了。这不是我尝试为对象获取Type 的行,而是我尝试实例化对象的行。我认为如果找不到 DLL,那么我获取 Type 的行就会崩溃。

我怀疑这与权限有关,但我在这些方面的调查没有结果。看起来 QAer 具有必要的权限。

注意:我不是 Windows 文件权限方面的专家。

【问题讨论】:

  • 您的 QA 人员是否使用 64 位操作系统,而您使用的是 32 位操作系统,反之亦然?
  • @DarkFalcon QA 人员和我都有 64 位 Windows 7 机器。
  • 可能值得运行Process Monitor:它应该向您显示它试图打开的路径和操作系统错误代码(即未找到文件、未找到路径、权限等)

标签: c# com-interop dynamic-binding


【解决方案1】:

问题是在遇到此问题的计算机上找不到目标 DLL 引用的某些 DLL。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    相关资源
    最近更新 更多