我有一个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之前,该类如下所示:
为了转换为COM,我创建了一个接口,并希望只公开function1和function2函数。因此,我修改了该类如下:
在主类中,我进行了以下修改: 1. 在AssemblyInfo中将COM可见属性设置为false,因为我不想公开所有公共方法。 2. 类的外观如下:
class classname
{
function1(){//do something}
function2(){//do something}
function3(){//do something}
function4(){//do something}
}
为了转换为COM,我创建了一个接口,并希望只公开function1和function2函数。因此,我修改了该类如下:
[ComVisible(true)]
[Guid("03S3233DS-EBS2-5574-825F-EERSDG8999"),InterfaceType(ComInterfaceType.InterfaceIsDual)]
interface Iinterface
{
function1();
function2();
}
在主类中,我进行了以下修改: 1. 在AssemblyInfo中将COM可见属性设置为false,因为我不想公开所有公共方法。 2. 类的外观如下:
[ComVisible(true)]
[Guid("2FD1574DS4-3FEA-455e-EW60A-EC1DFS54542D"), ClassInterface(ClassInterfaceType.None)]
class class1 : Iinterface
{
function1(){//do something}
function2(){//do something}
[ComVisible(false)] //i don't want the mehtod to be exposed
function3(){//do something}
[ComVisible(false)]
function4(){//do something}
}
我有以下问题需要更好地理解: 1. 如果我将类的可见性属性设置为true,并将默认的COM可见性属性(在assemblyinfo中)设置为false,那么对于我不想公开的方法,我是否需要明确地将COM可见性属性设置为false?我的理解是,我只会在接口中暴露我想要公开的函数,因此无论可见性属性如何,如果我不在接口中拥有该函数,则它将不可见?我已经了解如何使用regasm在客户端计算机上部署,只需复制dll并使用regasm.exe,我的问题是如何在未安装.NET的非开发计算机上部署?