0

我曾经有一个本地 C++ 项目,它使用 TLB 来引用一些类定义,如下所示:

#import "Data.tlb" raw_interfaces_only, raw_native_types, no_namespace, named_guids

而这个原生 c++ 具有使用来自这个 TLB 的项目的函数。所以例子:

MyClass::TransferData(_Scalars myScalars)
{
    // do transfer 
}

如上所见,_Scalars是TLB内部的一个接口。这个函数的目的是将一些数据从 MyClass (native C++) 传输到 GUI (VB6)

有一个项目更改,其中 GUI 已转换为 VB.NET,因此我已将本机 c++ 项目更改为托管/非托管 C++/CLI 项目。所以现在,Data.tlb(从 VB6 项目生成) - 现在是一个 VB.NET 项目,可以作为对我的 C++/CLI 项目的引用添加!

所以现在我有了这个参考,我怎样才能真正使用其中的类呢?显然,函数参数 _Scalars 现在给出了一个错误,因为我不再使用 TLB。

4

1 回答 1

0

我会构建您的项目,以便您的 GUI .NET 项目不依赖于您的核心业务逻辑项目。此外,我仍然会维护一个原生 C++ 项目,并创建一个新的 C++/CLI 项目,纯粹是为了互操作。C++/CLI 项目将负责用 C++/CLI 引用类包装本机类,这些类可以将任何本机对象编组为 .NET 对象或充当代理对象。如果您的 C++/CLI 项目依赖于其他 .NET 类,请将这些类分离到它们自己的项目中,例如 Project.Models 并将该项目添加为对您的 C++/CLI 项目的引用。

因此,为了进一步回答您的问题(如果我理解正确的话),如果您打开了 /clr,您可以在本机 C++ 类中引用一个 .NET 对象,但将该层保持在最低限度。一个例子,可以在这里找到.. http://www.codeproject.com/Articles/42319/Using-NET-Classes-Modules-from-Native-C。即,将您上面提到的类排除在 C++/CLI 项目之外。

于 2013-10-10T21:40:12.613 回答