2014-03-03 4 views
-1

리소스에서 char 포인터/문자열을 읽으려고하고 messagebox에서 표시하려고합니다. 그러나 그것은 비어있는 것으로 보이고 올바르게 읽는지 모르겠습니다.C/C++ 리소스 데이터의 메시지 상자

Resources

을 그리고 여기에 내가 읽어 사용하고있는 코드는 다음과 같습니다 :

여기 내 자원의

void main() 
{ 
    HGLOBAL G1, G2; 

    HMODULE hMod = GetModuleHandle(NULL); 

    G1 = LoadResource(hMod, FindResource(NULL, MAKEINTRESOURCE(RT_RCDATA), "RESOURCE1")); 
    G2 = LoadResource(hMod, FindResource(NULL, MAKEINTRESOURCE(RT_RCDATA), "RESOURCE2")); 

    //G1 = LoadResource(NULL, FindResource(NULL, "RCData", "RESOURCE1")); 
    //G2 = LoadResource(NULL, FindResource(NULL, "RCData", "RESOURCE2")); 

    MessageBoxA(NULL, (char*)LockResource(G1), (char*)LockResource(G1), MB_OK); 
    MessageBoxA(NULL, (char*)LockResource(G2), (char*)LockResource(G2), MB_OK); 


    /*char *strURL; 
    HMODULE hModule = GetModuleHandle(NULL); 
    HRSRC hResource = FindResource(hModule, "RESOURCE1", "RCData"); //HRSRC hResource = FindResource(hModule, "RCData", "RESOURCE1"); 
    HGLOBAL hMemory = LoadResource(hModule, hResource); 
    DWORD dwSize = SizeofResource(hModule, hResource); 
    LPVOID lpAddress = LockResource(hMemory); 

    memcpy(strURL, lpAddress, dwSize); 

    MessageBoxA(0, strURL, strURL, MB_OK);*/ 

    ExitProcess(0); 
    } 

주석으로 부품 내가 제대로 읽기 위해 노력 대안입니다. 무슨 일 이니? 나는 RT_RCDATA이 정확하지 않다는 것을 알고 있습니다. 왜냐하면 리소스가 명확하게 "RCDATA"입니다. 그렇지만 나는 또한 단지 LPCSTR만을 사용하려고 시도 했었지만, 그 역시 도움이되지 못했습니다.

이 기능은 무효이며, 16 비트 Windows와 이전 버전과의 호환성을 위해 지원됩니다 :이 MSDN의 말씀이기 때문에

또한, 나는 자원 (FreeResource)를 발표하고 있지 않다. 32 비트 Windows 응용 프로그램의 경우 LoadResource를 사용하여로드 된 리소스를 해제 할 필요가 없습니다.

잘못되었거나 잘못 되었나요?

편집 : 태그가 틀리면 올바른 태그를 추가해야하기 때문에 태그가 잘못되어 분명히 나쁘다.

+0

메시지 박스를() 문자열을 표시합니다. 따라서 할 수있는 일은 문자열 테이블 리소스의 문자열을 사용하는 것입니다. RCDATA 리소스에 무엇을 넣었는지 짐작하기 어렵습니다. 아마도 제대로 인코딩 된 0 종료 C 문자열이 아닙니다. 오류 검사를 건너 뛰어도 올바르지 않습니다. –

+0

어디에서'MessageBox' API를 얻을 수 있습니까? 이것은 C 라이브러리 나 C++이 아닙니다. 작성중인 언어와 사용중인 도구를 섞지 마십시오. –

+0

감사합니다. 한스. 오류 검사가 제대로 수행되지 않았지만 그 것이 중요하지 않다는 것을 알고 있습니다. 나는 또한'G1'이나'G2'가 비어 있는지 확인했다. 하지만 그 문자열 (또는 char *)을 char 포인터로 가져 오면 어떻게 사용할 수 있습니까? messagebox를 표시 하시겠습니까? 이미지에서 문자열이 저장된 위치를 볼 수는 있지만 코드가 일치합니까? 나는 그것을 믿을 수는 없지만 올바르게 할 방법을 찾아 내지 못했습니다. 도움이나 예제 코드가 좋을 것입니다. _ 편집 : _ Jens :'MessageBoxA'는 Windows.h (winuser.h)에서 왔습니다. – user2404495

답변

0

이 같은 LoadString WinAPI를 사용할 수 있습니다 :

HMODULE hMod = GetModuleHandle(NULL); 
char myString[512]; 
LoadString(hMod, IDS_STRING101, myString, 512); 
MessageBox(NULL, myString, "", MB_OK); 

IDS_STRING101이 당신의 .rc 파일에 정의 된

+0

고맙습니다.하지만 제 질문에 답변이되지 않습니다. 링크 된 이미지에서 볼 수있는 리소스에서 문자열을로드하려고합니다. RCData 디렉토리입니다. – user2404495