связывание shlwapi.h с функцией StrCmpLogicalW - PullRequest
1 голос
/ 25 апреля 2011

Есть идеи, как перенести этот код с C # на C ++?

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

Если я попробовал эту строку в моем заголовочном файле на C ++, компилятор сгенерировал кучу ошибок.

#include <Shlwapi.h>

Ответы [ 2 ]

7 голосов
/ 25 апреля 2011

Ошибки являются ошибками компоновщика, поскольку вы не включили соответствующий файл .lib Shlwapi.lib.

Вы можете включить файл .lib в настройки проекта или, альтернативно, добавив этот

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

, например, StdAfx.h.

0 голосов
/ 28 апреля 2011

Я наконец понял это. Вот функция. Крайне важно, чтобы вы поместили заголовочные файлы 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);
       }

    };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...