繁体   English   中英

为什么我不能通过COM访问我的课程?

[英]Why can't I access my class through COM?

我有一个用C#.net编写的类库。 我想在64位Windows计算机上向COM注册它,以便可以在脚本(javascript,vbscript等)中使用CreateObject()创建它的实例。 所以我创建了一个安装项目。 我将安装项目的目标平台设置为x64。 类库项目的目标平台设置为AnyCPU。 我为安装程序创建了一个自定义操作,该操作手动执行了驱动程序的注册,它看起来像这样...

RegistrationServices regsrv = new RegistrationServices();
if (!regsrv.RegisterAssembly(this.GetType().Assembly, AssemblyRegistrationFlags.SetCodeBase))
{           
   throw new InstallException("Failed To Register driver for COM Interop");
}

我可以在调试器运行时将其附加到该进程,并确定该注册已成功完成。

由于某些原因,当我尝试使用CreateObject()创建类的对象时,它给我一个错误,提示“无法创建名为...的对象”。 但是,如果我使用SysWOW64文件夹(32位文件夹)中的cscript.exe运行脚本,则对象创建成功,其余脚本运行正常。 因此,似乎该类已成功注册了32位而不是64位,或者我的项目具有32位依赖关系,并且64位Cscript宿主进程由于该依赖关系而无法创建它。 我的类库确实引用了我编写的另一个项目,但它也被设置为可用于任何CPU。 因此,这对于32位和64位进程应该是不错的选择。

有谁对我应该如何追踪这种32位依赖项有任何建议?

使用RegisterAssembly() 非常不寻常。 此处可能出错的一件事是安装程序以32位模式运行。 这会使RegisterAssembly()在错误的注册表部分中注册COM服务器。

无需执行此操作,只需在安装项目中将文件的Register属性设置为COM。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM