将shlwapi.h for链接到StrCmpLogicalW函数

linking shlwapi.h for to StrCmpLogicalW function

本文关键字:StrCmpLogicalW 函数 链接 for shlwapi      更新时间:2023-10-16

知道如何将这段代码从c#移植到c++吗?

[DllImport("shlwapi.dll", CharSet = CharSet.Unicode)]
private static extern int StrCmpLogicalW(string psz1, string psz2);

如果我用c++在头文件中尝试这一行,编译器会生成一堆错误。

#include <Shlwapi.h>

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

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

#pragma comment(lib, "Shlwapi.lib")

我终于弄明白了。这是函数。如果您自己有头文件,那么务必将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);
       }
    };