将的shlwapi.h链接到strmplogicalw函数 如何将这个代码从C++语言移植到C++? 如果我在C++中的头文件中尝试了这行,编译器会产生一系列错误。 #include <Shlwapi.h> #包括
这些错误是链接器错误,因为您没有包含相应的.lib文件Shlwapi.lib 您可以在项目设置中包含.lib文件,或者通过添加将的shlwapi.h链接到strmplogicalw函数 如何将这个代码从C++语言移植到C++? 如果我在C++中的头文件中尝试了这行,编译器会产生一系列错误。 #include <Shlwapi.h> #包括,c++,winapi,C++,Winapi,这些错误是链接器错误,因为您没有包含相应的.lib文件Shlwapi.lib 您可以在项目设置中包含.lib文件,或者通过添加 #pragma comment(lib, "Shlwapi.lib") 例如,StdAfx.h.我终于弄明白了。下面是函数。将shlwapi.h和vcclr.h头文件放在自己的头文件(如果有的话)之前是非常重要的。这就是我一直在努力解决的问题。我不完全明白为什么会这样。如果有人有好的解释,欢迎发表评论。另外,如果有人知道如何将最后三行代码组合到一个返回语句中,欢迎添加
#pragma comment(lib, "Shlwapi.lib")
例如,StdAfx.h.我终于弄明白了。下面是函数。将shlwapi.h和vcclr.h头文件放在自己的头文件(如果有的话)之前是非常重要的。这就是我一直在努力解决的问题。我不完全明白为什么会这样。如果有人有好的解释,欢迎发表评论。另外,如果有人知道如何将最后三行代码组合到一个返回语句中,欢迎添加注释
#include "shlwapi.h" //needed this for StrCmpLogicalW
#include <vcclr.h> //needed this for PtrtoStringChars
//your own header files
ref class FileInfoNameComparer: public IComparer
{
private:
virtual int Compare( Object^ x, Object^ y ) sealed = IComparer::Compare
{
FileInfo^ objX = gcnew FileInfo(x->ToString());
FileInfo^ objY = gcnew FileInfo(y->ToString());
pin_ptr<const wchar_t> wch1 = PtrToStringChars(objX->Name);
pin_ptr<const wchar_t> wch2 = PtrToStringChars(objY->Name);
return StrCmpLogicalW(wch1, wch2);
}
};
#包括“shlwapi.h”//strcplugicalw需要这个
#包括//PtrtoStringChars所需的
//您自己的头文件
ref类FileInfoNameComparer:公共IComparer
{
私人:
虚拟整数比较(对象^x,对象^y)sealed=IComparer::Compare
{
FileInfo^objX=gcnewfileinfo(x->ToString());
FileInfo^objY=gcnewfileinfo(y->ToString());
pin_ptr wch1=PtrToStringChars(objX->Name);
pin_ptr wch2=PtrToStringChars(对象->名称);
返回StrCmpLogicalW(wch1,wch2);
}
};
查看MSDN页面的“需求”部分以了解API—它分别告诉您在编译和链接时需要包含的头文件和库。在我发布这个问题之前,我已经试过了。但它似乎不起作用。我发现的一篇文章确实提到了微软的一些做法,并倾向于在项目设置中使用adding.lib文件。您熟悉在项目设置中添加.lib文件的步骤吗?web搜索将告诉您如何执行此操作,但pragma仍然有效。您可能已将此标记为答案,因为您需要vcclr.h
来编译所有.net代码。请注意,1。您的问题没有包含任何错误消息,因此我们不得不猜测,2。您的问题没有提到代码是混合模式C++/CLI。3.您错误地包含了shlwapi.h
,应该是\include
。
#include "shlwapi.h" //needed this for StrCmpLogicalW
#include <vcclr.h> //needed this for PtrtoStringChars
//your own header files
ref class FileInfoNameComparer: public IComparer
{
private:
virtual int Compare( Object^ x, Object^ y ) sealed = IComparer::Compare
{
FileInfo^ objX = gcnew FileInfo(x->ToString());
FileInfo^ objY = gcnew FileInfo(y->ToString());
pin_ptr<const wchar_t> wch1 = PtrToStringChars(objX->Name);
pin_ptr<const wchar_t> wch2 = PtrToStringChars(objY->Name);
return StrCmpLogicalW(wch1, wch2);
}
};