将shlwapi.h链接到StrCmpLogicalW函数

时间:2011-04-25 19:04:39

标签: c++ winapi

知道如何将此代码从C#移植到C ++?

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

如果我在C ++的头文件中尝试过这一行,编译器会产生一堆错误。

#include <Shlwapi.h>

2 个答案:

答案 0 :(得分:7)

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

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

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

,例如,StdAfx.h。

答案 1 :(得分:-1)

我终于明白了。这是功能。至关重要的是,如果您有任何头文件,请将shlwapi.h和vcclr.h头文件放在任何自己的头文件之前。这是我一直在努力解决的问题。不完全理解为什么会这样。如果有人有好的解释,欢迎发表评论。此外,如果有人知道如何将最后三行代码组合到单个return语句中,欢迎添加注释。

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

    };