テキストファイルを開く/読み取る/操作するためのいくつかの関数を備えた古いコード(元々はc ++ではなくcで開発された)を再利用しています。テキストファイルへのパスは、文字列(char *)として関数に渡され、次を使用して開かれます。FileToUse = fopen(filename, "rb");
次に、への複数の呼び出しが使用さfread()
れfseek()
ます。このコードは外部テキストファイルで機能することが知られていますが、プロジェクトのリソースとしてテキストファイルを含めたいと思います(VisualStudioのMFCC ++)。
このコードで乱暴なリソースを使用する方法について、Web上でいくつかの例を見つけました。
HINSTANCE hInst = AfxGetResourceHandle();
HRSRC hResource = FindResource(hInst, MAKEINTRESOURCE(IDR_TEXTFILE1), "TEXTFILE");
if (hResource){
HGLOBAL hLoadedResource = LoadResource(hInst, hResource);
if (hLoadedResource){
const char* pResource = LockResource(hLoadedResource);
if (pResource){
DWORD dwResourceSize = SizeofResource(hInst, hResource);
if (0 != dwResourceSize){ // if(FileToUse){
memcpy(&Buffer, pResource, (15 * 2)); // fread($Buffer, 15, 2, FileToUse);
pTemp = pResource + 200; // fseek(FileToUse, 200, SEEK_SET);
pTemp = pTemp + 100; // fseek(FileToUse, 100, SEEK_CUR);
pTemp = pResource + (dwResourceSize - 1) - 40; // fseek(FileToUse, -40, SEEK_END);
}
}
}
}
図のようにfread呼び出しをmemcpy()に置き換えましたが、fread(実際の読み取りアイテム)の戻り値が欠落しており、元のコードではファイルポインターがfseekによって移動されました。一時ポインターを使用したアプローチが正しいかどうか疑問に思います。 。
私の最終的な目標は、同様の関数プロトタイプを使用して、リソースに対するfreadおよびfseekの呼び出しをシミュレートすることです。
size_t resread( void* buffer, size_t size, size_t count, char* resource );
int resseek( char* resource, long offset, int origin );
どんな提案でも大歓迎です。