C# 名称为“的对象”&引用;无法创建COM

C# 名称为“的对象”&引用;无法创建COM,c#,vbscript,com,interop,C#,Vbscript,Com,Interop,我得到了以下COM对象 namespace PCKTicketCOM { [Guid("0057ddf4-7125-485b-b963-5d2b338040bc"), InterfaceType(ComInterfaceType.InterfaceIsIDispatch)] public interface IPCKTicketCOM { [DispId(1)] int AddTheseUp(int adder1, int adder2);

我得到了以下COM对象

namespace PCKTicketCOM
{
   [Guid("0057ddf4-7125-485b-b963-5d2b338040bc"),
   InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
   public interface IPCKTicketCOM
   {
       [DispId(1)]
       int AddTheseUp(int adder1, int adder2);
   }

   [Guid("3c63584c-f51a-4ce8-8f24-734686895cba"),
   ClassInterface(ClassInterfaceType.None)]
   public class PCKTicketCOM : IPCKTicketCOM
   {
        // a method that returns an int
        public int AddTheseUp(int adder1, int adder2)
        {
            return adder1 + adder2;
        }
   }
}
试图通过VBS调用它,我总是得到错误

The object with the name "PCKTicketCom.PCKTicketCOM" could not be created
我对如何解决这个问题一无所知

dim objTest, intResult
Set objTest = WScript.CreateObject("PCKTicketCOM.PCKTicketCOM")

intResult =  objTest.AddTheseUp(100,200)
WScript.echo "Result = " & intResult

使用google,我似乎也找不到任何关于这个问题的信息,如果有任何帮助,我将不胜感激。

您可以使用SysInternals的进程监视器来观察注册表的使用方式。通过Regasm.exe和VBS脚本引擎(通常是cscript.exe)实现。这样很容易看到不匹配

现在有一个非常常见的原因,那就是您没有意识到VBS脚本引擎在64位操作系统上以64位模式运行。除非您显式运行c:\windows\syswow64\cscript.exe以获得32位版本

64位程序在HKLM\Software\Classes\CLSID中查找,32位程序在HKLM\Software\Wow6432Node\Classes\CLSID中查找。注意添加的WOW6432节点。一种appcompat功能,确保程序在意外加载位错误的可执行文件时不会崩溃


如果让Visual Studio使用项目的“生成”选项卡中的“注册COM互操作”选项注册服务器,则只会写入32位WOW6432节点注册表项。VS作为32位进程的一个不可避免的副作用。如果您自己在Regasm.exe中注册,请确保选择正确的。将写入64位键的64位版本位于C:\Windows\Microsoft.NET\Framework64\v4.0.30319中,请注意“Framework64”。

您可以使用SysInternals的进程监视器来观察注册表的使用方式。通过Regasm.exe和VBS脚本引擎(通常是cscript.exe)实现。这样很容易看到不匹配

现在有一个非常常见的原因,那就是您没有意识到VBS脚本引擎在64位操作系统上以64位模式运行。除非您显式运行c:\windows\syswow64\cscript.exe以获得32位版本

64位程序在HKLM\Software\Classes\CLSID中查找,32位程序在HKLM\Software\Wow6432Node\Classes\CLSID中查找。注意添加的WOW6432节点。一种appcompat功能,确保程序在意外加载位错误的可执行文件时不会崩溃


如果让Visual Studio使用项目的“生成”选项卡中的“注册COM互操作”选项注册服务器,则只会写入32位WOW6432节点注册表项。VS作为32位进程的一个不可避免的副作用。如果您自己在Regasm.exe中注册,请确保选择正确的。将写入64位密钥的64位版本位于C:\Windows\Microsoft.NET\Framework64\v4.0.30319中,请注意“Framework64”。

哦,不,这只是一个输入错误,我会更正它。这只是一个猜测,但可能是您遇到了32位与64位的问题吗?你已经检查过你的COM注册注册表了吗?@FIlburt还没有,你介意解释一下我在哪里可以检查吗?@Stefan你的意思是程序集中的“[assembly:ComVisible(true)]?试着运行它,它应该在.net framework目录中的某个地方:
regasm yoursassembly.dll
哦,不,这只是一个输入错误,我会更正它。这只是一个猜测,但可能是您遇到了32位与64位的问题吗?你已经检查过你的注册表了吗?@FIlburt还没有,你介意解释一下我在哪里可以检查吗?@Stefan你是说程序集中的“[assembly:ComVisible(true)]?试着运行它,它应该在.net framework目录中的某个地方:
regasm yourassembly.dll