通过COMInterop公开C#类我有一个C#类库和一个powerbuilder应用程序。我想公开c#类并在powerbuilder应用程序中使用它。我使用以下博客来公开这些功能,以便powerbuilder应用程序可以访问它https://whoisburiedhere.wordpress.com/2011/07/12/creating-a-com-object-from-scratch-with-c/http://jumbloid.blogspot.com/2009/12/making-net-dll-com-visible.html所以我公开了COM并使其在powerbuilder中可访问,但我仍然有一些基本问题以确保我遵循最佳指南.该类在转换为COM之前看起来像classclassname{function1(){//dosomething}function2(){//dosomething}function3(){//dosomething}function4(){//dosomething}}对于COM,我创建了一个接口,我只想在其中公开function1和function2。所以我修改了类[ComVisible(true)][Guid("03S3233DS-EBS2-5574-825F-EERSDG8999"),InterfaceType(ComInterfaceType.InterfaceIsDual)]interfaceIinterface{function1();功能2();}在主类中,我做了以下修改1.我在AssemblyInfo中将COMVisible属性设置为false,因为我不想公开所有公共方法。2.该类看起来像[ComVisible(true)][Guid("2FD1574DS4-3FEA-455e-EW60A-EC1DFS54542D"),ClassInterface(ClassInterfaceType.None)]classclass1:Iinterface{function1(){//dosomething}function2(){//dosomething}[ComVisible(false)]//我不想暴露方法function3(){//dosomething}[ComVisible(false)]function4(){//dosomething}我有以下问题可以让我更好地理解1.如果我将一个类的可见属性设置为true和默认的COM可见属性(in),我是否明确地将COM可见属性设置为false以供我不使用'想公开方法assemblyinfo)是假的?我的理解是我只有我想在界面中公开的功能,所以无论可见属性如何,如果我没有界面中的功能那么它就不会可见吗?我确实了解如何通过复制dll并使用regasm.exe在客户端计算机中使用regasm进行部署,我的问题是如何在未安装.NET的非开发计算机中进行部署?[ClassInterface(ClassInterfaceType.None)]这意味着没有任何类实现细节是可见的、正确的和纯COM方式。因此,无需将[ComVisible(false)]应用于您不想公开的方法。只有Iinterface方法是可见的。使用ClassInterfaceType.AutoDual为.NET提供了便利,CLR将自动合成一个接口。但是,它暴露的太多了,System.Objectinheritance中的方法(如GetHashCode等)也将是可见的,没有办法隐藏它们。像您一样明确声明接口是更好的方法。目标机器必须安装.NET,这是严格要求的。以上是C#学习教程:通过COMInterop,公开了C#类分享的所有内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
