2010-12-03 5 views
7

VC++에서 DLL을 쓰고 있는데 외부 텍스트 파일을 사용해야합니다. 나는 지금 이와 비슷한 것을 가지고있다 :VC++의 리소스에서 텍스트 파일을로드하는 방법은 무엇입니까?

ifstream file; 
string line; 

file.open("C:\\Users\\Me\\Desktop\\textfile.txt"); 
getline(file,line); 
file.close(); 

나는이 파일을 자료실에 가지고 있다고 이해한다.

"ResourceView"-> "Add Resource"-> "Import"로 이동하여 텍스트 파일을 추가했습니다. 내 텍스트 파일을 선택하고 사용자 정의 리소스 유형을 만들었습니다.

위 코드와 유사하게이 파일에 액세스하려면 어떻게해야합니까? 나는 Resource.h를 가지고있다. 그러나 그것으로 무엇을해야 하는가? 내 리소스 텍스트 파일도 편집 할 수 있습니까?

답변

11

가정 :

  • 자원 유형은 "TEXT"
  • 자원 ID는 MY_RESOURCE_ID 당신은 당신의 EXE의 HINSTANCE를 저장 한
  • (이 및 Resource.h에서 일정한 것)입니다 또는 DLL (리소스를 포함하는)을 m_hInstance에 저장합니다.

메모리에 자원을로드하고 그것에 대한 포인터를 얻기는 다음과 같이 수행됩니다

HRSRC hResource = FindResource(m_hInstance, MAKEINTRESOURCE(MY_RESOURCE_ID), L"TEXT"); 

if (hResource) 
{ 
    HGLOBAL hLoadedResource = LoadResource(m_hInstance, hResource); 

    if (hLoadedResource) 
    { 
     LPVOID pLockedResource = LockResource(hLoadedResource); 

     if (pLockedResource) 
     { 
      DWORD dwResourceSize = SizeofResource(m_hInstance, hResource); 

      if (0 != dwResourceSize) 
      { 
       // Use pLockedResource and dwResourceSize however you want 
      } 
     } 
    } 
} 

참고 : 당신은 언로드 또는 32 비트 또는 64 비트 vesions에 자원의 잠금을 해제 할 필요가 없습니다 Windows의 경우, 그리고 리소스를 다시 얻으면 메모리가 누출되지 않습니다. 당신은 항상 똑같은 기억을 얻습니다.

리소스를 업데이트하는 방법은 Updating Resources in MSDN을 참조하십시오.

+0

고마워요! 이것이 제가 찾고 있던 것입니다. ATL을 사용하고 있으므로'_AtlBaseModule.m_hInst'을'hInstance' 장소에두면 잘 작동합니다. 파일이나 스트림처럼이 메모리 덩어리를 어떻게 사용하는지 궁금합니다. 알고 계시다면 여기를 클릭하십시오 : http://stackoverflow.com/questions/4346240/ –

+0

@ CichyK24 스트림은 IStream 또는 다른 종류의 스트림과 유사합니까? –

+0

아, ifstream처럼; 모르겠다. 미안. –

관련 문제