2011-04-25 6 views
1

이 코드를 C#에서 C++로 이식하는 방법을 알고 싶습니까?Shlwapi.h를 StrCmpLogicalW 함수에 연결하기

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

C++의 헤더 파일에서이 행을 시도하면 컴파일러에서 많은 오류가 발생합니다.

#include <Shlwapi.h> 
+1

확인 API에 대한 MSDN 페이지의 요구 사항 섹션 - 그것은 당신에게 헤더 파일과 각각 컴파일 - 링크시에 포함하는 데 필요한 라이브러리를 모두 알려줍니다. http://msdn.microsoft.com/en-us/library/bb759947(v=vs.85).aspx –

답변

-1

나는 결국 그것을 알아 냈습니다. 여기에 함수가 있습니다. shlwapi.h 및 vcclr.h 헤더 파일을 갖고 있다면 헤더 파일 앞에 놓는 것이 중요합니다. 그것은 내가 어려움을 겪고있는 문제였다. 그것이 왜 있는지 완전히 이해하지 마십시오. 누구든지 좋은 설명이 있으면 의견을 환영합니다. 또한 누군가 마지막 3 줄의 코드를 하나의 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); 
     } 

    }; 
+2

아마도 .net 코드를 컴파일하기 위해'vcclr.h'가 필요했기 때문에 이것을 답변으로 표시했을 것입니다. 1. 귀하의 질문에 어떤 오류 메시지도 포함되지 않았으므로 추측해야합니다. 2. 귀하의 질문에이 코드는 혼합 모드 C++/CLI라고 언급하지 않았습니다. 3.'shlwapi.h '를 잘못 포함 시켰습니다.'#include '이어야합니다. –

7

해당 .lib 파일 인 Shlwapi.lib가 없기 때문에 오류가 링커 오류입니다.

당신은, 또는 대안 StdAfx.h 함께, 예를 들어,이

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

을 추가하여 프로젝트 설정에서 lib 디렉토리 파일을 포함 할 수 있습니다.

+0

이 질문을 게시하기 전에 실제로이를 시도했습니다. 하지만 작동하지 않는 것 같습니다. 그리고 내가 찾은 기사 중 하나는 Microsoft에 대한 무언가가 그것을 무시하고 .lib 파일을 프로젝트 설정으로 사용하는 것을 선호한다고 말한 것입니다. .lib 파일을 프로젝트 설정에 추가하는 단계에 익숙하십니까? – user523234

+0

웹 검색에서 어떻게하는지 알려주지 만 프라그마는 여전히 작동합니다. –