Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
混合C++与C++/CLI 我有一个解决方案,它由一个本地C++ DLL和一个C++ /CLI包装器组成。我的目标是在C++的/CLI中创建一个包装器,它是本地C++ DLL。_C++_.net_Visual Studio_Mfc_C++ Cli - Fatal编程技术网

混合C++与C++/CLI 我有一个解决方案,它由一个本地C++ DLL和一个C++ /CLI包装器组成。我的目标是在C++的/CLI中创建一个包装器,它是本地C++ DLL。

混合C++与C++/CLI 我有一个解决方案,它由一个本地C++ DLL和一个C++ /CLI包装器组成。我的目标是在C++的/CLI中创建一个包装器,它是本地C++ DLL。,c++,.net,visual-studio,mfc,c++-cli,C++,.net,Visual Studio,Mfc,C++ Cli,每当我试图在包装器中创建一个本地C++类的实例时,我会遇到许多链接错误,参见下面的内容: 2> .NETFramework,Version=v4.0.AssemblyAttributes.cpp 2>NFileOperation.obj : error LNK2028: unresolved token (0A000208) "public: static bool __cdecl CFileOperation::FileExists(class ATL::CStringT<

每当我试图在包装器中创建一个本地C++类的实例时,我会遇到许多链接错误,参见下面的内容:

2>  .NETFramework,Version=v4.0.AssemblyAttributes.cpp
2>NFileOperation.obj : error LNK2028: unresolved token (0A000208) "public: static bool __cdecl CFileOperation::FileExists(class ATL::CStringT<wchar_t,class ATL::StrTraitATL<wchar_t,class ATL::ChTraitsCRT<wchar_t> > > const &)" (?FileExists@CFileOperation@@$$FSA_NABV?$CStringT@_WV?$StrTraitATL@_WV?$ChTraitsCRT@_W@ATL@@@ATL@@@ATL@@@Z) referenced in function "[T2M] void __clrcall `dynamic initializer for 'public: static float * tagVARIANT::* ATL::CVarTypeInfo<float *>::pmField''(void)" (__t2m@???__E?pmField@?$CVarTypeInfo@PAM@ATL@@2QQtagVARIANT@@PAMQ3@@@YMXXZ@?A0x22b777aa@@YMXXZ)
2>DeskUpdateManaged.obj : error LNK2028: unresolved token (0A00021C) "public: static bool __cdecl CFileOperation::FileExists(class ATL::CStringT<wchar_t,class ATL::StrTraitATL<wchar_t,class ATL::ChTraitsCRT<wchar_t> > > const &)" (?FileExists@CFileOperation@@$$FSA_NABV?$CStringT@_WV?$StrTraitATL@_WV?$ChTraitsCRT@_W@ATL@@@ATL@@@ATL@@@Z) referenced in function "public: bool __clrcall DeskUpdateManaged::Conversion::FileExist(class System::String ^)" (?FileExist@Conversion@DeskUpdateManaged@@$$FQ$AAM_NP$AAVString@System@@@Z)
2>DeskUpdateManaged.obj : error LNK2019: unresolved external symbol "public: static bool __cdecl CFileOperation::FileExists(class ATL::CStringT<wchar_t,class ATL::StrTraitATL<wchar_t,class ATL::ChTraitsCRT<wchar_t> > > const &)" (?FileExists@CFileOperation@@$$FSA_NABV?$CStringT@_WV?$StrTraitATL@_WV?$ChTraitsCRT@_W@ATL@@@ATL@@@ATL@@@Z) referenced in function "public: bool __clrcall DeskUpdateManaged::Conversion::FileExist(class System::String ^)" (?FileExist@Conversion@DeskUpdateManaged@@$$FQ$AAM_NP$AAVString@System@@@Z)
2>NFileOperation.obj : error LNK2001: unresolved external symbol "public: static bool __cdecl CFileOperation::FileExists(class ATL::CStringT<wchar_t,class ATL::StrTraitATL<wchar_t,class ATL::ChTraitsCRT<wchar_t> > > const &)" (?FileExists@CFileOperation@@$$FSA_NABV?$CStringT@_WV?$StrTraitATL@_WV?$ChTraitsCRT@_W@ATL@@@ATL@@@ATL@@@Z)
2>C:\Users\ABGZAMANK\Music\DeskUpdate\Dev\Source\Solution\Debug\DeskUpdateManaged.dll : fatal error LNK1120: 3 unresolved externals
是否有一个更充分的方法来实现我的目标?
关于这个问题的任何建议都是非常值得赞赏的。

< P>似乎你的本机C++代码使用的是ATL/MFC。假设您是在VS下编译,请转到C++/CLI项目的项目属性->配置属性->常规,并根据项目类型选择使用MFC和使用ATL作为静态库或共享dll。此标志将向项目添加必要的include路径、链接路径和lib,以便在项目中使用ATL/MFC类型。此外,请确保您将C++ /CLI项目链接到您的本机C++项目,以避免在项目属性的链接器段和输入中容易发现与您的项目链接的错误。

您是否将本地LIBs设置为CLI链接器的输入?我不确定,如何检查我是否有?右键单击您的项目->属性->链接器。在常规站点上指定附加库目录。在输入站点上,将output.lib指定为附加依赖项。我已添加了引用,但问题仍然存在。我尝试将ATL和MFC作为静态库和动态库编译项目,但在调试模式下编译失败。然而,项目确实在发布模式下编译,链接器错误仍然存在。请解释一下你的意思是链接C++ + CLI项目和本地C++,我不确定我是否正确地做了?@哈立德:你的本地C++代码和同一个项目的托管包装部分吗?这是极不可取的。在不同的程序集项目中,应该将它们分开。参见@哈立德:同样,您的本机C++ DLL是否创建导出库?它肯定应该这样做,否则您将需要使用LoadLibraryEx调用方法。。。如果是这样,您需要按照Nico在您的问题中评论的方式链接C++/CLI包装器项目中的导入库。很抱歉,回复太晚。本机C++的DLL和C++ /CLI包装器在同一个解决方案中的单独项目中。库被导出了,我引用了文件夹和库,就像Nico提到的一样。
bool NFileOperation::FileExists(CAtlString sPathName)
{
    return CFileOperation::FileExists(sPathName);
}