proof1 发表于 2024-6-19 10:05

CFree 如何将exe程序打包?

CFree 5.0+ DirectX + C++

源代码已经编译链接成功,一个exe程序。


1、如何将“ exe程序 + 几个jpg精灵图片 + 几个mp3音效 ”打包成一个exe文件?(单独拷贝这一个文件后,就可以正常运行)


2、CFree编译链接,有两种选项。一个是Debug,一个是Release 。 主要就是速度、性能的差别吧?

JetBrains 发表于 2024-6-19 12:11

好奇 lz 为什么用 CFree,第一次听说这东西

—— 来自 鹅球 v3.0.0.82-alpha

frosta 发表于 2024-6-19 12:56

本帖最后由 frosta 于 2024-6-18 21:18 编辑

没用过CFree,
第二个问题,debug和release的主要区别是是否保留debug信息和优化区别,如果没有debug需求的话release更小也更快


第一个问题GPT是这么说的

将一个EXE程序与其资源(如JPEG图片和MP3音效)打包成一个独立的可执行文件,可以使用以下方法:

方法一:使用资源文件(Resource File)
你可以将图片和音效作为资源嵌入到EXE文件中。这需要使用资源脚本(.rc文件)和一些额外的工具。以下是具体步骤:

1. 编写资源脚本文件(.rc)
创建一个资源脚本文件(例如 resources.rc),内容如下:

rc
Copy code
IDR_JPG1 JPG "image1.jpg"
IDR_JPG2 JPG "image2.jpg"
IDR_MP31 MP3 "sound1.mp3"
IDR_MP32 MP3 "sound2.mp3"
2. 在C++代码中加载资源
在你的C++代码中,使用WinAPI函数从资源中加载图片和音频。例如:

cpp
Copy code
#include <windows.h>
#include <mmsystem.h>

HBITMAP LoadBitmapFromResource(int resourceID) {
    HRSRC hResource = FindResource(NULL, MAKEINTRESOURCE(resourceID), L"JPG");
    HGLOBAL hLoadedResource = LoadResource(NULL, hResource);
    void* pResourceData = LockResource(hLoadedResource);
    DWORD resourceSize = SizeofResource(NULL, hResource);

    HGLOBAL hBuffer = GlobalAlloc(GMEM_MOVEABLE, resourceSize);
    void* pBuffer = GlobalLock(hBuffer);
    CopyMemory(pBuffer, pResourceData, resourceSize);

    IStream* pStream = NULL;
    CreateStreamOnHGlobal(hBuffer, TRUE, &pStream);

    IPicture* pPicture = NULL;
    OleLoadPicture(pStream, resourceSize, FALSE, IID_IPicture, (LPVOID*)&pPicture);

    HBITMAP hBitmap;
    pPicture->get_Handle((OLE_HANDLE*)&hBitmap);
    return hBitmap;
}

void PlaySoundFromResource(int resourceID) {
    HRSRC hResource = FindResource(NULL, MAKEINTRESOURCE(resourceID), L"MP3");
    HGLOBAL hLoadedResource = LoadResource(NULL, hResource);
    void* pResourceData = LockResource(hLoadedResource);
    DWORD resourceSize = SizeofResource(NULL, hResource);

    HGLOBAL hBuffer = GlobalAlloc(GMEM_MOVEABLE, resourceSize);
    void* pBuffer = GlobalLock(hBuffer);
    CopyMemory(pBuffer, pResourceData, resourceSize);

    mciSendString(L"open \"MP3_BUFFER\" type waveaudio alias sound", NULL, 0, NULL);
    mciSendString(L"play sound", NULL, 0, NULL);

    GlobalUnlock(hBuffer);
    GlobalFree(hBuffer);
}
3. 将资源文件编译进EXE
在CFree中,将资源文件添加到你的项目中,然后在编译选项中指定资源文件。
页: [1]
查看完整版本: CFree 如何将exe程序打包?