2010-07-28 86 views
1

我在Visual Studio 2008中创建了一个简单的类库项目,其中包含一个类,如下所示。我试图让这个类注册COM互操作,以便我可以通过非托管脚本(如vbscript或jscript)使用它。在为COM注册程序集时遇到问题

在我的项目构建属性中,我选中了“注册COM Interop”复选框。

在组装设置中,我选中了“使此组件可见”,并且我确认[assembly: ComVisible(true)]属性存在于assembly.cs文件中。

每次构建此项目时,都会收到一个错误消息,其内容为“projectname.dll不包含任何可以为COM Interop注册的类型,而且,我还没有能够成功创建一个使用VBScript的。有谁知道,这是不正确注册?

我的VBScript中失败,在该行创建ActiveX对象... Set F = CreateObject("64BitCLTest.Class1")

最后,我如何才能VS中的64位区域注册此注册表而不是32位区域,以便64位进程可以使用它?

-- The Test Class-- 
namespace _64BitCLTest 
{ 
    [Guid("BBAA06EF-CA4C-4fe2-97CD-9B1D85ADA656")] 
    [ClassInterface(ClassInterfaceType.AutoDual)] 
    [ComVisible(true)] 
    [ProgId("64BitCLTest.Class1")] 
    public class Class1 
    { 
     Class1() 
     { 
      // do nothing 
     } 

     public string Method1() 
     { 
      return "This is a return string from method 1"; 
     } 

     public int Property1 
     { 
      get {return 777;} 
     } 
    } 
} 

回答

2

你需要标记的构造市民:

-- The Test Class-- 
namespace _64BitCLTest 
{ 
    [Guid("BBAA06EF-CA4C-4fe2-97CD-9B1D85ADA656")] 
    [ClassInterface(ClassInterfaceType.AutoDual)] 
    [ComVisible(true)] 
    [ProgId("64BitCLTest.Class1")] 
    public class Class1 
    { 
     public Class1() 
     { 
      // do nothing 
     } 

     public string Method1() 
     { 
      return "This is a return string from method 1"; 
     } 

     public int Property1 
     { 
      get {return 777;} 
     } 
    } 
} 
+0

这工作,但你知道如何让它注册这个程序集,以便64位进程可以调用它以及32位进程?目前我只能使用SysWOW64文件夹中的cscript创建它 – PICyourBrain 2010-07-28 17:04:34

+1

您需要使用RegAsm的64位版本进行注册:%SYSTEMROOT%\ Microsoft.NET \ Framework64 \ v2.0.50727 \ RegAsm.exe老实说不知道如何用csproj设置来做到这一点。 – ConsultUtah 2010-07-28 17:09:15

+0

我知道如何制作安装程序自定义操作。是否可以在我用作自定义操作的方法中从C#代码调用RegAsm? – PICyourBrain 2010-07-28 17:10:48

0

有两个部分这个答案。 consutahah说的第一个问题是我没有标记为公共的构造函数。

第二个答案是VS2008中存在一个错误(我相信),即使为x64的目标平台配置了安装项目,也会导致程序集永远无法在注册表的64位部分注册。

我安装了VS2010,重建完全相同的项目并运行安装。该程序集完美地注册,我可以通过使用64位进程的COM成功访问它。我仍然没有在VS2008中找到这个解决方案。

相关问题