我注册.NET程序集为COM互操作不公开我的方法(Registering my .net assem

2019-06-23 09:41发布

好了,我要疯了。 我一直试图做一个简单的.NET程序集可见作为COM对象使用,但它不工作。 我一直在尝试不同的aproaches的,但他们没有工作。 到目前为止,我已经得到了最接近的是一个带有属性,接口最少的,手动注册等。

我有一个VBScript作为测试看起来像这样:

Dim o
o = CreateObject("MyNamespace.MyClass")
msgbox o.Test()

我的C#代码如下所示:

using System;
using System.Runtime.InteropServices;
namespace MyNamespace 
{
  [ProgId("MyNamespace.MyClass")]
  public class MyClass
  {
    public string Test()
    {
       return "teststring";
    }
  }
}

我的项目(VS2008)我选择了“使装配COM可见” - 这添加的属性我的AssemblyInfo.cs我还检查了“注册为COM互操作”。

我可以看到,PROGID真的没什么区别(在我的案件反正) - 只要我指定的真正命名空间+类名,我可以但覆盖它。我想这很好。

问题是 - 我的CreateObject顺利,但该方法测试()无法找到。 事实上,如果我把DLL和提取TLB和期望,我看不出有什么方法可言。

我得到的错误是这样的:

C:\的Inetpub \ wwwroot的\ ASPTest \ testrun.vbs(3,1)Microsoft VBScript运行时错误:对象不支持此属性或方法: '测试'

我喜欢任何反馈,但只是为了让你知道我一直在努力。 我曾与GUID和AttributeGuid乱搞的类,在类中定义的标记有ComVisible特性明确和我试着不让注册为COM互操作,而是做了regasm /基本代码/ REGFILE。

最后一点 - 我大部分的测试都是围绕着一个非签名的程序集,而是试图找出我用强名称/键尝试以及错误,但它没有做任何事情。

谁能帮我看看这个问题,好吗?

Answer 1:

我提到我运行Windows 7 RC 64位?

嗯,我想这或许可以解释我的VS是不是在做正确的事: http://kbalertz.com/956933/Issues-building-project-assembly.aspx看来VS使用注册表的32位版本,而不是64位?



Answer 2:

我从一开始就开始,就在我的项目COM互操作删除任何东西,我加入

[Guid(...some guid...)]
[ComVisible(true)]

在MyClass的,我增加了一个强名称(使用项目设置来设置它 - 而不是在AssemblyInfo.cs中定义它。

当我整理汇编,我将文件复制到另一个位置在那里我做了

regasm MyNamespace.MyClass.dll /codebase /regfile

然后我跑,并接受了注册表项。

这使得它的工作 - 每当我做出改变,我只是重新编译和其复制旧的(没有注销),然后我只能做:

regasm MyNamespace.MyClass.dll /codebase

......这就是它 - 我对MyClass的所做的更改都imediately可见我的VBScript和在我的ASP页。



Answer 3:

难道你需要定义一个有方法的一些接口,以及实现该接口?



Answer 4:

这对我的作品:

using System;
using System.Runtime.InteropServices;
namespace MyNamespace
{

    [GuidAttribute("8DDE02DF-B31C-4d91-98A7-C64444701985")]
    [ClassInterface(ClassInterfaceType.AutoDual)]
    public class clsCOMWraper
    {
       public string Test()
      {
         return "teststring";
      }
    }
}

Thse总成必须签名。

的,注册regasm /基本代码



Answer 5:

我没有看到的任何类构造函数。 COM互操作需要一个默认构造函数(没有任何PARAMS),它成功地生成一个COM接口。

尝试添加一个构造函数,看看它是否工作。



Answer 6:

检查此链接它完美地我跟着它工作,给喜欢“对象不支持此属性或方法”在错误的完美解决方案代码项目帮助



文章来源: Registering my .net assembly for COM interoperability doesn't expose my methods