【发布时间】:2021-07-26 16:27:00
【问题描述】:
为我对 C++/CLI 的基本知识表示歉意,但它是最近才作为必需品介绍给我的。我正在尝试使用 C++/CLI 为非托管 C++ 库创建一个包装器。我已经关注this helpful guide 并且可以确认它(以某种方式)可以解决问题。我遇到的问题是 C++ 指针公开了对非托管库中公共类的访问。在我的 CPP 库中,我使用它们通过访问单个入口点类来调用多个类的方法。在 C# 中,我无法访问应该可以通过这些类指针访问的方法。我收到一条错误消息,指出“该成员由于其保护级别而无法访问”,并且“->”指针未授予对 公开类 成员的访问权限。
我的代码如下所示:
UnmanagedCode::ClassA
...
// some code
...
public:
void doSomething() { ... };
ClassB* classB() { return classB.get(); };
private:
std::unique_ptr<ClassB> classB_ {};
C++/CLI 包装器
public ref class WrapperClass: public ManagedObject<UnmanagedCode::ClassA>
{
public:
WrapperClass() : ManagedObject(new UnmanagedCode::ClassA) {}; // template class code in the hyperlink
~WrapperClass() {};
void doSomething() { m_Instance->doSomething(); };
UnmanagedCode::ClassB* classB() { return m_Instance->classB(); };
};
C#程序
class Program
{
static void Main(string[] args)
{
WrapperClass w = new WrapperClass();
w.doSomething(); // this works fine
w.classB(); // here is where I am getting the error
}
}
【问题讨论】: