2010-12-03 28 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は、あなたがあなたのEXEのためのhInstanceはを格納しているMY_RESOURCE_ID(これはあなたの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上のリソースのロックを解除する必要はありませんあなたが再びリソースを取得した場合、メモリがリークすることはありません。あなたはいつも同じメモリを使います。

リソースの更新については、Updating Resources in MSDNを参照してください。

+0

ありがとうございました!これは私が探していたものです。私はATLを使用しているので、 '_AtlBaseModule.m_hInst'を' hInstance'の場所に置きました。うまく動いています。 ファイルやストリームのように、このチャンクをどのように使うのだろうと思います。 あなたが知っている場合は、ここをクリックしてください:http://stackoverflow.com/questions/4346240/ –

+0

@ CichyK24ストリームはIStreamまたは異なる種類のストリームですか? –

+0

ああ、ifstreamのように。ごめんなさい、ごめんなさい。 –

関連する問題