Visual studio 2012 C+中未解析的外部符号+;管理 我用C++编译的DLL,用CL/GR编译,具有全局函数。p>

Visual studio 2012 C+中未解析的外部符号+;管理 我用C++编译的DLL,用CL/GR编译,具有全局函数。p>,visual-studio-2012,c++-cli,managed,Visual Studio 2012,C++ Cli,Managed,比如说 void Managed2UnManaged(DataStructures::AAA^ elem, DataStructures::CPP::AAA* copy_elem); 当我尝试在C++托管控制台应用程序中使用这些函数时,我会得到以下错误 错误LNK2028:未解析的令牌(0A00048C)“void\uu clrcall Managed2UnManaged(类数据结构::AAA^,类数据结构::CPP::AAA*)”(?Managed2UnManaged@$$FYMXP

比如说

void Managed2UnManaged(DataStructures::AAA^ elem, DataStructures::CPP::AAA* copy_elem);    
当我尝试在C++托管控制台应用程序中使用这些函数时,我会得到以下错误

错误LNK2028:未解析的令牌(0A00048C)“void\uu clrcall Managed2UnManaged(类数据结构::AAA^,类数据结构::CPP::AAA*)”(?Managed2UnManaged@$$FYMXP$AAVAAA@DataStructures@奈克斯汀@@PAV1CPP@23@@Z)

错误LNK2019:未解析的外部符号“void\uu clrcall Managed2UnManaged(类数据结构::AAA^,类数据结构::CPP::AAA*)”(?Managed2UnManaged@$$FYMXP)$AAVAAA@DataStructures@奈克斯汀@@PAV1CPP@23@@Z)

我向控制台应用程序添加了对dll的引用,但它仍然给出了错误

我还尝试添加了uu declspec(dllexport),但后来我发现

错误C3395:'Managed2UnManaged':u declspec(dllexport)不能应用于具有u clrcall调用约定的函数

如果我指定我得到的所有

错误C4439:“Managed2UnManaged”:签名中具有托管类型的函数定义必须具有_clrcall调用约定

我正在使用VS2012

h文件已被删除

class XXX {
 public:
static void Managed2UnManaged(DataStructures::RegResult^ elem,     DataStructures::CPP::RegResult* copy_elem);
};
和cpp文件

 void XXX::Managed2UnManaged(DataStructures::RegResult^ elem, DataStructures::CPP::RegResult* copy_elem)
{

}
问题解决了。问题是,我还需要声明类公共REF。这导致了一个不同的问题,因为本机C++类型是私有的。所以我不得不用“公开”这个词。
谢谢大家。

我认为问题可能是CLR不允许全局函数


必须创建一个托管类,并将函数作为该类的静态成员函数编写,才能导出该函数。

此函数是否由DLL导出?如果是,请检查调用约定是否相同,错误消息表明调用约定为clrcall。我尝试通过添加u declspec(dllexport)进行导出,但出现错误C3395:“Managed2UnManaged”:u declspec(dllexport)无法应用于具有uu clrcall调用约定的函数\u clrcall与dllexport不兼容。如果您的控制台应用程序是本机应用程序,您可以将其更改为托管应用程序。否控制台也是托管的,并使用/clr编译。您只发布了函数声明。函数的代码实际位于何处?不,支持全局函数。编译器只是简单地生成名为
@Hans的类的方法。我更改了代码,但仍然存在相同的问题。我编辑了原始帖子,以h和cpp文件的形式显示代码