저는 C++을 처음 사용하여 도움이 필요합니다. 문자열이 들어있는 리소스 전용 dll을 만들었습니다.이 문자열을 다른 프로젝트에서 사용하여 저장된 문자열을 읽어야합니다. LoadString은 쓰는 문자열에 메모리를 할당합니까?
나는 읽기 문자열을 읽기 위해 다음과 같은 기능을 썼다 : 내가 예상 출력을 얻기 위해 내 코드를 변경해야합니까LPTSTR GetResourceStr(HMODULE resContainer,int resourceID)
{
//The stings that are stored in the dll are:
//
//ID |Value|Caption
//__________________________________________
//IDS_STRING101 |101 |stringggg
//IDS_STRING102 |102 |string 102
//IDS_STRING103 |103 |string 103
LPTSTR strBuffer = NULL;//is a (non-const) TCHAR string
if(0!=resContainer){
int copied=LoadString(resContainer,resourceID ,(LPTSTR)&strBuffer,0);
}
return strBuffer;
}
int _tmain(int argc, _TCHAR* argv[])
{
HMODULE resContainer=LoadLibraryEx(L"ResourceDll.dll",NULL, LOAD_LIBRARY_AS_DATAFILE);
LPTSTR msg = GetResourceStr(resContainer,101);
std::wcout<<msg<<std::endl;
//Expected output: stringggg
//The output that i get: stringgggstring 102 string 103
int i = 0;
std::cin>>i;
return 0;
}
- stringggg를? 왜 그런 일이 발생합니까? LoadString은 리소스에서 읽은 문자열에 대해 메모리를 할당 했습니까? 아니면 방금 문자열이 이미 저장되어있는 메모리의 위치에 대한 포인터가 있습니까? 도움 주셔서 감사합니다.
LPTSTR []이 필요하므로 버퍼에 문자열을 복사 할 수 있습니다. 마지막 인수는 해당 배열의 크기 여야하며 0은 정확하지 않습니다. 해당 배열을 반환하는 것은 매달려있는 포인터 버그가 될 것입니다. std :: wstring을 반환하는 것을 고려하십시오. –