0

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

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

我在代码中放了一个消息框来显示错误,这就是 QAer 得到的: 在此处输入图像描述

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

然后我做了一些进一步的调查,以确定究竟是哪条线路崩溃了。下面是用 out 调用有问题的行来实例化 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为对象获取 a 的行,而是我尝试实例化对象的行。我认为如果找不到 DLL,那么我获取 DLL 的行Type就会崩溃。

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

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

4

1 回答 1

0

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

于 2013-06-11T21:31:59.527 回答