将的shlwapi.h链接到strmplogicalw函数 如何将这个代码从C++语言移植到C++? 如果我在C++中的头文件中尝试了这行,编译器会产生一系列错误。 #include <Shlwapi.h> #包括

将的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头文件放在自己的头文件(如果有的话)之前是非常重要的。这就是我一直在努力解决的问题。我不完全明白为什么会这样。如果有人有好的解释,欢迎发表评论。另外,如果有人知道如何将最后三行代码组合到一个返回语句中,欢迎添加

这些错误是链接器错误,因为您没有包含相应的.lib文件Shlwapi.lib

您可以在项目设置中包含.lib文件,或者通过添加

#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);
       }

    };