【发布时间】:2015-06-29 06:31:33
【问题描述】:
我有一个 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 之前看起来像
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?我的理解是我只会有我想在界面中公开的功能,所以不管可见属性如何,如果我在界面中没有该功能,那么它将不可见?我确实了解如何通过复制 dll 并使用 regasm.exe 在客户端计算机中使用 regasm 进行部署,我的问题是如何在未安装 .NET 的非开发机器中进行部署?
【问题讨论】:
-
我不认为你可以部署到没有 .NET 的机器上。即使暴露给 COM,它仍然是一个 .NET 程序集,并且需要安装框架,以便运行时可以加载和执行程序集。
-
也许这个操作意味着没有安装 Visual Studio 或 Windows SDK。