C# 非托管C++代码的CLI指针

C# 非托管C++代码的CLI指针,c#,c++,wrapper,command-line-interface,C#,C++,Wrapper,Command Line Interface,我正在开发我的第一个C++/CLI包装器,并且对wrt指针感到非常困惑。在我所做的特定项目中,我试图包装一个非托管C++ DLL,以便在C应用程序中使用它。这里有两个目标:1能够在我的应用程序中使用库,2学会这样做。在这个网站和谷歌上搜索了数小时,得到了一系列接近的答案;我好像一路都到不了那里。我尝试合并的非托管库是键值存储LevelDB,我知道至少有一个.NET包装器,但正如我所说的,我正在尝试了解这一点 下面的代码是CLI包装器类的开头,该类的编写与非托管代码类似。也就是说,从功能上来说,这

我正在开发我的第一个C++/CLI包装器,并且对wrt指针感到非常困惑。在我所做的特定项目中,我试图包装一个非托管C++ DLL,以便在C应用程序中使用它。这里有两个目标:1能够在我的应用程序中使用库,2学会这样做。在这个网站和谷歌上搜索了数小时,得到了一系列接近的答案;我好像一路都到不了那里。我尝试合并的非托管库是键值存储LevelDB,我知道至少有一个.NET包装器,但正如我所说的,我正在尝试了解这一点

下面的代码是CLI包装器类的开头,该类的编写与非托管代码类似。也就是说,从功能上来说,这就是我试图实现的目标。毫不奇怪,这会生成以下编译器错误:

cannot convert parameter 3 from 'cli::interior_ptr<Type>' to 'leveldb::DB **'
使用局部变量:

DBWrapper()
{
    leveldb::Options options;
    options.create_if_missing = true;

    leveldb::DB* local_db(nullptr);
    leveldb::Status status =leveldb::DB::Open(options, "/tmp/testdb", &local_db);
    db = local_db;
}
垃圾收集器可以移动此指向的正在构造的对象,因此成员变量没有固定地址。

使用局部变量:

DBWrapper()
{
    leveldb::Options options;
    options.create_if_missing = true;

    leveldb::DB* local_db(nullptr);
    leveldb::Status status =leveldb::DB::Open(options, "/tmp/testdb", &local_db);
    db = local_db;
}

垃圾收集器可以移动由此指向的正在构造的对象,因此成员变量没有固定地址。

可能在ref类中,T*并不表示指向T的指针?只是一个猜测…也许在ref类中,T*并不意味着指向T的指针?只是一个猜测……是的。我现在处在一个链接器问题的世界中,但这回答了我的问题。回想起来很明显。谢谢,是的。我现在处在一个链接器问题的世界中,但这回答了我的问题。回想起来很明显。非常感谢。
DBWrapper()
{
    leveldb::Options options;
    options.create_if_missing = true;

    leveldb::DB* local_db(nullptr);
    leveldb::Status status =leveldb::DB::Open(options, "/tmp/testdb", &local_db);
    db = local_db;
}