考虑下面给出的C#中与自动化兼容的COM库。它遵循一个常见的COM模式,即有一个可见的工厂coclassFooFactory实现ICreateFoos,它创建一个IFoo类型的对象。FooFactory是类型库中唯一的coclass。(工厂模式对于COM特别有用,因为它不允许参数化构造函数)。在下面的代码中,我发现我无法从jscript访问返回的IFoo接口(interface)除非我使FooImpl类ComVisible(通过取消注释注释行;这使它在类型库中显示为组件类)。从VBscript访问它没有这样的问题。也就是说,我可以运行这个VBScript:setff=CreateObj
我们已经创建了一个C#类库程序集,并使其在COM中可见,以便能够从PHP调用其方法。这过去工作正常,但现在我们想将它安装在WindowsServer2008服务器上,但我们一直遇到错误“类未注册”。为了排除任何依赖性问题,我用C#创建了一个很小的测试类库。该类库是为任何CPU构建的,并且它是COM可见的(也在AssemblyInfo.cs中将COMVisible设置为true)。测试类库只包含一个类和一个方法。该类称为TestLib,命名空间也称为TestLib。该方法称为Test,仅返回一个字符串。我们所做的如下:-构建了TestLib.dll-将其复制到WindowsServer2
MSDN有thisarticleabout[ComVisible]attribute.我不太明白设置[ComVisible(true)]时会发生什么。MSDN说Thedefaultistrue,whichindicatesthatthemanagedtypeisvisibletoCOM.Thisattributeisnotneededtomakepublicmanagedassembliesandtypesvisible;theyarevisibletoCOMbydefault.Onlypublictypescanbemadevisible.所以他们说默认情况下公共(public)类型
当您在VisualStudio中创建新的C#项目时,生成的AssemblyInfo.cs文件包含一个指定程序集GUID的属性。属性上方的注释指出“如果此项目向COM公开”则使用它。我的程序集都不包含需要对COM可见的类型,因此我用[assembly:ComVisible(false)]标记了我的程序集。那么指定GUID有什么意义吗?我的感觉是答案是否定的——那么为什么默认的AssemblyInfo.cs文件同时包含[assembly:ComVisible(false)]和[assembly:Guid("...")]?编辑:总结响应:在它们之间,答案解释了当且仅当使用COM互操作时才需要