C#Interop-无法创建对象

| 我已经创建了一个C#COM对象,并试图从VBscript(在Windows Scripting Host下)实例化它。 该程序集可以正确生成,依此类推,RegAsm声称它已成功注册。但是,每当我尝试在.vbs脚本中实例化它时,都会得到:   错误:无法创建命名对象      \“ MyProgId.blah \”代码:80040154 我正在运行Win7 x64 Ultimate,该对象是使用VS2010为.NET 3.5构建的。 我还尝试将已编译的DLL复制到Win Server 2003计算机上,并且在那里得到相同的结果。 救命。 另外,值得注意的是:我可以注册但不能实例化任何旧的VB6 COM DLL。 (是的,我正在以管理员身份运行脚本。) 更新资料 仅出于笑容,我创建了一个使用ѭ0that查找和创建对象的测试应用程序:
Type t = Type.GetTypeFromProgID(progId);

if (t == null)
{
    Console.WriteLine(\"Couldn\'t create object.\");
}
else
{
    var obj = Activator.CreateInstance(t);

    Console.WriteLine(\"Successfully created Object: Type is [{0}]\", obj);

    Console.WriteLine(\"Calling method [{0}]\\n\\n\", methodName);

    var result = t.InvokeMember(methodName, BindingFlags.Default | BindingFlags.InvokeMethod, null, obj, null);

    Console.WriteLine(\"Result: {0}\", result);

}
这可以正常工作。但是,尝试从VBscript创建对象仍然失败。 啊 更新,第二 运行SysInternals ProcMon之后,我看到相当多的注册表查询在
HKCU\\Software\\Classes\\...
下查找progID和guid,而其中没有提及该对象(当我在RegEdit中查看时)。存在相当多的
NAME NOT FOUND
错误。 我尝试注册
regasm
%windir%\\microsoft.net\\framework\\v4...
framework64
版本,但没有任何效果。     
已邀请:
  我正在运行Win7 x64 Ultimate 这与诸如此类的COM问题非常相关。该错误消息表示COM客户端找不到COM服务器的注册表信息。 Windows的64位版本具有两个VB脚本解释器,一个是64位版本,另一个是32位版本。具有不同位数的进程具有不同的注册表视图,一个64位客户端看不到32位COM服务器。反之亦然。 重要的是您使用的Regasm.exe版本。有两个,一个在C:\\ Windows \\ Microsoft.NET \\ Framework \\ v2.0.50727 \\ RegAsm.exe中,另一个在Framework64中。默认情况下,您运行32位版本,该版本会在注册表的32位视图中输入注册信息。您应该改用Framework64中的64位版本。或同时使用两者,.NET创建可同时使用两种功能运行的COM服务器。 如果仍然有问题,请使用SysInternals的ProcMon工具查看脚本解释器在哪里寻找CLSID密钥。     
如果您在64位操作系统下运行32位接口,则可以通过使用\\ windows \\ syswow64下的wscript / cscript(而不是\\ windows \\ system32下的默认值)来解决该VBScript错误)运行脚本。那使我绊了一天。     
我认为您可能正在研究安全问题。 查看此stackoverflow帖子,看看是否可以解决您的问题。 无法在经典ASP / VBScript页中实例化.Net COM对象(错误ASP 0177)     

要回复问题请先登录注册