私はC++で新しく、助けが必要です。 私は、文字列を含むリソースのみのdllを作成しました。私は格納された文字列を読み込むためにこの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;
}
iは、期待される出力を得るために私のコードでは何を変更する必要があります - stringgggを? どうしてですか? LoadStringは、リソースから読み込んだ文字列にメモリを割り当てるか、文字列がすでに格納されているメモリ内の場所へのポインタを取得しましたか? ご協力ありがとうございます!
LPTSTR []が必要なので、文字列をバッファにコピーできます。最後の引数はその配列のサイズでなければならず、0は決して正しくありません。その配列を返すことは、ぶら下がりポインタのバグです。 std :: wstringを返すことを検討してください。 –