네이티브 Windows 응용 프로그램의 리소스에 텍스트 파일 삽입
C++ Windows 프로그램을 사용하고 있습니다.데이터가 있는 텍스트 파일이 있습니다.현재 텍스트 파일은 별도의 파일로 실행 시 로드되어 구문 분석됩니다.이를 리소스로 바이너리에 포함시키는 것이 어떻게 가능합니까?
네이티브 윈도 어플리케이션에서 작업하고 있기 때문에 텍스트파일의 내용을 컴파일된 리소스에 삽입하기 위한 사용자 정의 리소스를 만듭니다.
사용자 정의 리소스의 형식은 로드하는 함수와 마찬가지로 MSDN에 문서화되어 있습니다.
다음과 같이 텍스트 파일을 리소스 파일에 포함합니다.
nameID typeID filename
어디에nameID
는 자원을 식별하는 고유한 16비트 부호 없는 정수입니다.typeID
리소스 유형을 식별하는 255보다 큰 고유한 16비트 부호 없는 정수입니다(이러한 정수는 에서 정의할 수 있습니다).resource.h
파일)을 클릭합니다.filename
는 컴파일된 리소스에 바이너리 콘텐츠를 삽입할 파일의 경로입니다.
예를 들어 다음과 같습니다.
인resource.h
:
// Other defines...
#define TEXTFILE 256
#define IDR_MYTEXTFILE 101
리소스 파일:
#include "resource.h"
// Other resource statements...
IDR_MYTEXTFILE TEXTFILE "mytextfile.txt"
그런 다음 다음과 같이 로드합니다(오류 검사 코드는 명확하게 하기 위해 생략).
#include <windows.h>
#include <cstdio>
#include "resource.h"
void LoadFileInResource(int name, int type, DWORD& size, const char*& data)
{
HMODULE handle = ::GetModuleHandle(NULL);
HRSRC rc = ::FindResource(handle, MAKEINTRESOURCE(name),
MAKEINTRESOURCE(type));
HGLOBAL rcData = ::LoadResource(handle, rc);
size = ::SizeofResource(handle, rc);
data = static_cast<const char*>(::LockResource(rcData));
}
// Usage example
int main()
{
DWORD size = 0;
const char* data = NULL;
LoadFileInResource(IDR_MYTEXTFILE, TEXTFILE, size, data);
/* Access bytes in data - here's a simple example involving text output*/
// The text stored in the resource might not be NULL terminated.
char* buffer = new char[size+1];
::memcpy(buffer, data, size);
buffer[size] = 0; // NULL terminator
::printf("Contents of text file: %s\n", buffer); // Print as ASCII text
delete[] buffer;
return 0;
}
리소스가 실행 파일의 바이너리에 있고 프로그램이 종료될 때 자동으로 삭제되므로 실제로 리소스를 해방할 필요가 없습니다.FreeResource()
32비트 및 64비트 Windows 시스템에서는 아무것도 동작하지 않습니다).
데이터는 실행 가능한 바이너리에 존재하기 때문에 검색된 포인터를 통해 직접 수정할 수 없습니다(따라서LoadFileInResource()
함수의 구현은 포인터를const char*
)를 사용해야 합니다.BeginUpdateResource()
,UpdateResource()
,그리고.EndUpdateResource()
기능을 합니다.
사용할 수 있습니다.xxd
(Linux 머신 또는 아마도 sigwin에서) .h/.cc 파일의 데이터를 생성합니다.
이에 대해 자세히 설명하는 스택오버플로우 질문은 많이 있습니다.
언급URL : https://stackoverflow.com/questions/2933295/embed-text-file-in-a-resource-in-a-native-windows-application
'programing' 카테고리의 다른 글
PHP의 문자열을 특정 문자 수에 가장 가까운 단어로 잘라내는 방법은 무엇입니까? (0) | 2023.01.30 |
---|---|
query_cache_size와 query_cache_limit의 차이점은 무엇입니까? (0) | 2023.01.30 |
Laravel 테스트는 각 테스트 후에 트랜잭션을 롤백하지 않습니다. (0) | 2023.01.20 |
href 태그 사용 안 함 (0) | 2023.01.20 |
UTC 시간 가져오기(PHP) (0) | 2023.01.20 |