知道如何将此代码从C#移植到C ++?
[DllImport("shlwapi.dll", CharSet = CharSet.Unicode)]
private static extern int StrCmpLogicalW(string psz1, string psz2);
如果我在C ++的头文件中尝试过这一行,编译器会产生一堆错误。
#include <Shlwapi.h>
答案 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);
}
};