我得到了以下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
我似乎无法使用谷歌找到有关此问题的任何内容,我们将不胜感激。
答案 0 :(得分:4)
您可以使用SysInternals' Process Monitor以观察注册表的使用方式。 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中查找。注意添加的Wow6432Node。一个appcompat功能,可确保程序在意外加载具有错误位数的可执行文件时不会崩溃。
如果让Visual Studio使用"注册COM互操作"注册服务器在项目的Build选项卡中,只会写入32位Wow6432Node注册表项。 VS是一个32位进程的相当不可避免的副作用。如果您使用Regasm.exe自行注册,请确保选择正确的。将编写64位密钥的64位版本存放在C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319中,注意" Framework64"。