C# COM 类 - DISP_E_UNKNOWNNAME

rse*_*nna 2 c# com vbscript .net-3.5

我已经在 C# 中声明了一个 COM 可见类。代码如下:

[ComVisible(true)]
public class AComVisibleClass : TheParentClass
{
    public bool SomeFunc(string id)
    {
        return true;
    }

}
Run Code Online (Sandbox Code Playgroud)

此类由工厂类实例化,也可通过 COM 访问。

但是,如果我尝试在 VB 脚本文件中访问,DISP_E_UNKNOWNNAME则会引发异常。

这是我们在这里工作的一个预先存在的图书馆上的一个新课程。所有其他类都可以通过 COM 访问。整个库被编译成一个程序集文件。我已经使用 注册了新程序集regasm,但我仍然收到此异常。

我尝试使用 VS2008 调试 COM 调用。工厂类似乎能够实例化AComVisibleClass. 仅当工厂尝试执行时才会抛出上述异常SomeFunc

我知道这听起来有点(?)有点含糊,但我不能在这里公开真正的代码。如果有人需要更多信息,请询问我。

小智 5

我可以想到这个问题的三个可能的原因:

原因 1:CreateObject 中使用的名称错误:

我想你的 VBScript 代码调用了这样的东西:

 Set obj = CreateObject("MyLibrary.AComVisibleClass")
Run Code Online (Sandbox Code Playgroud)

如果这是正确的,那么请打开注册表编辑器并检查该HKEY_CLASSES_ROOT键是否包含名为MyLibrary.AComVisibleClass. 如果不是,那么您的库名称可能与您预期的不同。在注册表中搜索AComVisibleClass以找到正确的库名称。

原因 2:64 位问题:

如果问题发生在 64 位操作系统上,原因可能是您的 VBScript 作为 32 位进程运行,而 C# COM DLL 是 64 位,反之亦然。

原因3:错误的函数名称:

您可能在脚本中使用了错误的函数名称,例如obj.SomeFnc(1)代替obj.SomeFunc(1),或者您选择的函数名称是 VBScript 中的保留关键字或包含不寻常的字符。