C++ 纯虚拟结构和唯一\u ptr的DLL导入无法编译,因为\u对已压缩

C++ 纯虚拟结构和唯一\u ptr的DLL导入无法编译,因为\u对已压缩,c++,unique-ptr,dllexport,pure-virtual,C++,Unique Ptr,Dllexport,Pure Virtual,我有两个项目,其中我的代码在一个项目中,并作为dll导出,导入项目是一个测试项目。最终,我想要一个vtable,我也可以只使用struct将它导入c 我的纯虚拟结构如下所示: #ifdef DLL_EXPORTS #define MyAPI __declspec( dllexport ) #else DLL_EXPORTS #define MyAPI __declspec( dllimport ) #endif DLL_EXPORTS struct MyAPI IVirtual {

我有两个项目,其中我的代码在一个项目中,并作为dll导出,导入项目是一个测试项目。最终,我想要一个vtable,我也可以只使用struct将它导入c

我的纯虚拟结构如下所示:

#ifdef DLL_EXPORTS
#define MyAPI  __declspec( dllexport )
#else DLL_EXPORTS
#define MyAPI  __declspec( dllimport  )
#endif DLL_EXPORTS

struct MyAPI IVirtual
{
    virtual int GetNumber() = 0;
    virtual ~IVirtual() = 0;
};

MyAPI IVirtual * IVirtual_New(int);
MyAPI void IVirtual_Delete(IVirtual *);
这有一个dll的实现:

#include "Virtual.h"

struct Concrete : IVirtual
{
    int n;
    Concrete(int n) : n(n) { }
    virtual int GetNumber() { return n; }
    virtual ~Concrete() {}
};

IVirtual::~IVirtual() {}

MyAPI IVirtual * IVirtual_New(int n)
{
    auto that = new Concrete(n);
    return that;
}

MyAPI void IVirtual_Delete(IVirtual * that)
{
    auto fingerscrossed = static_cast<Concrete*>(that);
    delete fingerscrossed;
}

我想这与析构函数有关,但我无法确定那里到底发生了什么

今天该休息了

decltype(&IVirtual_Delete) 

我想你是对的。我将类型从
decltype(IVirtual\u Delete)
更改为
void(*)(IVirtual*)
。为什么不是同一种类型?@hanpassant得到了:)
decltype(&IVirtual\u Delete)
C2207: 'std::_Compressed_pair<_Ty1,_Ty2,false>::_Myval1': a member of a class template cannot acquire a function type
decltype(&IVirtual_Delete)