>  기사  >  백엔드 개발  >  C를 사용하여 Windows 응용 프로그램의 실행 가능한 리소스에 텍스트 파일을 포함하려면 어떻게 해야 합니까?

C를 사용하여 Windows 응용 프로그램의 실행 가능한 리소스에 텍스트 파일을 포함하려면 어떻게 해야 합니까?

DDD
DDD원래의
2024-11-17 09:11:03550검색

How can I embed text files into executable resources for Windows applications using C  ?

Windows 애플리케이션용 실행 가능 리소스에 텍스트 삽입

사용자 정의를 통해 텍스트 파일을 포함하여 C Windows 프로그램 내에 데이터를 삽입할 수 있습니다. 자원. 이 기술에는 텍스트 파일의 바이너리 콘텐츠가 포함된 별도의 리소스 파일을 생성하여 런타임 중에 동적으로 로드 및 액세스할 수 있도록 하는 작업이 포함됩니다.

리소스 파일 생성

텍스트 파일을 포함하려면 다음 리소스 파일(.rc)을 만듭니다. 지침:

[resourceName id] [resourceType id] [filename]

위치:

  • resourceName id: 리소스의 고유 식별자(예: IDR_MYTEXTFILE).
  • resourceType id: 이보다 큰 고유 식별자 255보다 리소스 유형을 지정합니다(예: TEXTFILE).
  • 파일 이름: 포함할 텍스트 파일의 경로.

예:

IDR_MYTEXTFILE TEXTFILE "mytextfile.txt"

리소스 로드

FindResource, LoadResource 등의 기능을 사용하여 삽입된 리소스를 코드에 로드할 수 있습니다. 구현 예는 다음과 같습니다.

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));
}

위치:

  • name: 리소스 이름 ID(예: IDR_MYTEXTFILE).
  • 유형: 리소스 유형 ID(예: TEXTFILE).
  • size: 포함된 파일의 크기 data.
  • data: 삽입된 데이터에 대한 포인터.

Usage

삽입된 데이터는 다음 스니펫에 설명된 대로 프로그램을 실행하세요.

// 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
    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;
}

다음 단계에 따라 다음을 수행할 수 있습니다. 텍스트 파일이나 기타 데이터를 기본 Windows 애플리케이션에 리소스로 손쉽게 삽입하여 동적 액세스를 보장하고 코드 구성을 간소화합니다.

위 내용은 C를 사용하여 Windows 응용 프로그램의 실행 가능한 리소스에 텍스트 파일을 포함하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.