如何将配置文件嵌入 C++ VS2015 控制台应用程序而不是硬编码为常量数据?
How to embed config files in C++ VS2015 console application instead of hard-code as const data?
有很多关于简单地将其保存为 const 数据或将其转换为二进制数据但没有详细信息的答案。
我看过这个:How to embed a file into an executable?
我不喜欢将配置文件转换为常量数据。
如何在编译时将配置文件嵌入到 exe 中,但不在 exe 旁边。
需要详细步骤。
谢谢。
您必须手动添加设置,因为 visual studio 不知道如何自动处理配置文件。如果我们不手动执行,配置文件将不会复制到输出目录。
转到项目属性 -> 配置属性 -> 构建事件 -> post 构建事件 并更改命令行:
复制app.config"$(TargetPath).config"
之后您必须添加来自 system.configuration 的新引用。在 project properties -> common properties -> references -> add new reference -> .net -> system.configuraion
中找到
然后从 project -> new -> configuration file
创建你的配置文件
我了解到您想创建用于存储配置的自修改 exe 文件。作为一个简单的答案,如果不破解页面保护,您将无法实现。
Here and here 你可以找到一些有用的信息。
一种Windows特定的方法是将配置文件作为资源嵌入到可执行文件中:
在某个头文件中为资源定义标识符,比如 resource.h
:
#define CONFIG_FILE_RESOURCE_ID 1
将 .rc 文件添加到您的项目中,其中包含以下行:
#include "resource.h"
CONFIG_FILE_RESOURCE_ID RCDATA "config.txt"
其中 config.txt
是将要嵌入的文件的名称。
RCDATA
是资源类型(自定义二进制数据)。
或者,如果您的 Visual Studio 版本带有
资源编辑器,你可以使用它。
要从您的程序中读取资源,您必须:
- 调用
FindResource(NULL, MAKEINTRESOURCE(CONFIG_FILE_RESOURCE_ID), RT_RCDATA)
获取资源句柄。
- 调用
LoadResource(NULL, hrsrc)
将资源句柄hrsrc
转换为HGLOBAL
。
- 使用
LockResource
和SizeofResource
函数获取指向数据的指针和嵌入文件的大小。
您可能必须提供实际的 module/instance 句柄而不是 NULL
,尤其是当您的代码位于 DLL 中时。
有很多关于简单地将其保存为 const 数据或将其转换为二进制数据但没有详细信息的答案。
我看过这个:How to embed a file into an executable?
我不喜欢将配置文件转换为常量数据。
如何在编译时将配置文件嵌入到 exe 中,但不在 exe 旁边。
需要详细步骤。
谢谢。
您必须手动添加设置,因为 visual studio 不知道如何自动处理配置文件。如果我们不手动执行,配置文件将不会复制到输出目录。
转到项目属性 -> 配置属性 -> 构建事件 -> post 构建事件 并更改命令行:
复制app.config"$(TargetPath).config"
之后您必须添加来自 system.configuration 的新引用。在 project properties -> common properties -> references -> add new reference -> .net -> system.configuraion
中找到然后从 project -> new -> configuration file
创建你的配置文件我了解到您想创建用于存储配置的自修改 exe 文件。作为一个简单的答案,如果不破解页面保护,您将无法实现。
Here and here 你可以找到一些有用的信息。
一种Windows特定的方法是将配置文件作为资源嵌入到可执行文件中:
在某个头文件中为资源定义标识符,比如
resource.h
:#define CONFIG_FILE_RESOURCE_ID 1
将 .rc 文件添加到您的项目中,其中包含以下行:
#include "resource.h" CONFIG_FILE_RESOURCE_ID RCDATA "config.txt"
其中
config.txt
是将要嵌入的文件的名称。RCDATA
是资源类型(自定义二进制数据)。或者,如果您的 Visual Studio 版本带有 资源编辑器,你可以使用它。
要从您的程序中读取资源,您必须:
- 调用
FindResource(NULL, MAKEINTRESOURCE(CONFIG_FILE_RESOURCE_ID), RT_RCDATA)
获取资源句柄。 - 调用
LoadResource(NULL, hrsrc)
将资源句柄hrsrc
转换为HGLOBAL
。 - 使用
LockResource
和SizeofResource
函数获取指向数据的指针和嵌入文件的大小。
您可能必须提供实际的 module/instance 句柄而不是
NULL
,尤其是当您的代码位于 DLL 中时。- 调用