我正在.NET中编写一个类库,该类库包装了一个COM dll并公开了其他.NET代码使用的特定功能。COM库定义了几个枚举,我使用了一些枚举类型作为参数,如下所示:
//C#
public void TransactionTypeSetByEnum(COMComponent.TransactionType transType)
{
this.TransactionType = transType
}
'VB.NET'
Public Sub TransactionTypeSetByEnum( _
ByVal transType As COMComponent.TransactionType)
Me.TransactionType = transactionType
End Sub
但是,当我从另一个项目使用这个.NET包装器时,编译器看不到COM类型(我不想将它们公开给consuming类)。例如。。。
netWrappedObject.TransactionTypeSetByEnum( //...No intellisense for the enum
有没有办法在.NET包装器库中公开底层非托管枚举,而不添加非托管DLL引用负责使用该库的项目?
其他背景信息:
该企业已经有工作的VB6代码,这些代码已经编译成COM组件。业务不想重写.NET托管代码中的那些组件,但希望能够在.NET应用程序中使用现有代码。与其让每个.NET应用程序直接拖动COM组件,我的目标是在现有的COM组件周围写一个.NET“包装器”,并用类和接口向其他.NET应用程序公开所需的功能。
在我上面的问题中,我的问题是COM dll有几个
enum
我想暴露
通过
“包装”该DLL的.NET组件。假设COM dll有一个名为
ComFoo
它有一个枚举调用
ComFooEnum
. 我想要
NetFoo
以某种方式暴露
ComFooEnum公司
当其他项目消耗
. 我不希望其他项目被要求参考
康福
只是为了能看到
暴露于
网孚
. 如果我不得不模仿
做一个新的
NetFooEnum
下面是一个图表,它试图解释我要实现的封装:
______________________________
| |
| Compiled VB6 COM Assembly |
| Exposes class called |
| ComFoo |
|____________________________|
||
_____________________ ||
| | ||
| Existing VB6 | ||
| Business | < |
| Application | ||
| references ComFoo |
|___________________|
//The business is building new applications in .NET
//that need to consume ComFoo, which cannot be rewritten.
//NetFoo exposes the functionality of ComFoo.
____________________________________
| |
| .NET Wrapper Assembly |
| Exposes class called NetFoo |
| ______________________________ |
| | | |
| | Compiled VB6 COM Assembly | |
| | Exposes class called | |
| | ComFoo | |
| |____________________________| |
|__________________________________|
||
_____________________ ||
| | ||
| New .NET Business | < |
| Order Entry App | ||
| references NetFoo | ||
|___________________| ||
||
_____________________ ||
| | ||
| New .NET Business | ||
| Internet App | < |
| references NetFoo | ||
|___________________|