【发布时间】:2011-08-31 10:44:54
【问题描述】:
假设我有以下 NativeClassInstance 的简单包装器。
public ref class Wrapper
{
private:
NativeClass *_wrapped;
public:
Renderer()
{
_wrapped = new NativeClass();
}
~Renderer()
{
delete _wrapped;
}
operator NativeClass*()
{
return _wrapped;
}
}
现在,我想用 Wrapper wrapper = new Wrapper() 从 C# 创建一个 Wrapper 的实例,并将它用在另一个本地功能包装器中,该包装器位于 another 程序集中,带有 Helper.Foo(wrapper)(没有其他功能没有什么奇怪的与另一个程序集中的包装类直接相关,IMO):
// Utilities is in another Assembly
public ref class Helper
{
public:
static Foo(Wrapper ^wrapper)
{
// Do something in native code with wrapper->_wrapped
}
}
隐式用户转换的结果是:
- 无法访问候选函数
如果我将 _wrapped 公之于众:
- 无法访问类中声明的私有成员...
现在,我了解到本机类型的可见性在程序集之外是 private。那么,我应该如何在它定义的程序集之外的本机代码中使用包装的实体?我读过make_public,但你不能使用模板类型,所以在一般情况下它似乎非常有限。我错过了什么吗?有没有更正确的解决方案?
【问题讨论】:
标签: assemblies c++-cli wrapper native visibility