首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# COM类- DISP_E_UNKNOWNNAME

C# COM类- DISP_E_UNKNOWNNAME
EN

Stack Overflow用户
提问于 2010-09-11 05:48:38
回答 2查看 5K关注 0票数 2

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

代码语言:javascript
复制
[ComVisible(true)]
public class AComVisibleClass : TheParentClass
{
    public bool SomeFunc(string id)
    {
        return true;
    }

}

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

但是如果我试图在VB脚本文件中访问,就会抛出DISP_E_UNKNOWNNAME异常。

这是一个新的类,它基于我们在工作中已有的库。所有其他类都可以通过COM访问。整个库被编译成单个程序集文件。我已经使用regasm注册了新的程序集,但是我仍然得到这个异常。

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-11 15:40:43

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

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

我假设您的VBScript代码调用的代码类似于:

代码语言:javascript
复制
 Set obj = CreateObject("MyLibrary.AComVisibleClass")

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

原因2: 64位问题:

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

原因3:函数名错误:

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

票数 5
EN

Stack Overflow用户

发布于 2010-09-11 06:02:25

听起来你需要支持IDispatch

查看Does C# .NET support IDispatch late binding?

编辑

这个答案可能是错误的,我最终可能会删除它。就目前而言,它似乎增加了价值,所以我会让它留下来。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3688603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档