找回密码
 立即注册
搜索
查看: 1048|回复: 2

[软件] CFree 如何将exe程序打包?

[复制链接]
     
发表于 2024-6-19 10:05 | 显示全部楼层 |阅读模式
CFree 5.0  + DirectX + C++

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


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


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

回复

使用道具 举报

     
发表于 2024-6-19 12:11 来自手机 | 显示全部楼层
好奇 lz 为什么用 CFree,第一次听说这东西

—— 来自 鹅球 v3.0.0.82-alpha
回复

使用道具 举报

发表于 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中,将资源文件添加到你的项目中,然后在编译选项中指定资源文件。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|上海互联网违法和不良信息举报中心|网上有害信息举报专区|962110 反电信诈骗|举报电话 021-62035905|Stage1st ( 沪ICP备13020230号-1|沪公网安备 31010702007642号 )

GMT+8, 2024-11-26 22:47 , Processed in 0.024864 second(s), 5 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表