C++/CLI 包装器不能使用来自本机C++ dll 的矢量

C++/CLI wrapper can't use vector from native C++ dll

本文关键字:C++ 本机 dll CLI 包装 不能      更新时间:2023-10-16

我有一个像这样的项目:c -> c /cli包装器 -> c#app。

我有一个导出的类,在c dll中称为 Drawing,.h .h包含一个 static std::vector<void*>,vector在.cpp file中定义

问题是我遇到以下错误:

错误

c 的本机dll .lib文件已链接到包装器,通常包装器可以与其他内容一起使用,但是一旦添加了std :: vector,它就会开始抛出链接器错误。

我尝试在C DLL中创建一个 void*作为argumument的函数,并在"内部"添加到列表中,但是我仍然得到相同的错误:

错误

任何类型的帮助都将受到赞赏

回答扩展我的评论。
您可以尝试将std::vector<void*>包装到更简单的结构中,并真正需要的功能如下:

class YourClass
{
private:
    std::vector<void*> _vec;
public:
    // implement functionalities you need
    void add(void* elem)
    {
        _vec.add(elem);
    }
    // etc.
};

或通过继承:

class YourClass : public std::vector<void*>
{
public:
    YourClass(int size)
    : std::vector<void*>(size) {}
};