#c #windows #compilation #resources #icons
#c #Windows #Сборник #Ресурсы #Значки
Вопрос:
Я работаю над проектом, в котором я должен использовать компилятор Digital Mars c . Мне нужно добавить значок в мой .exe
файл. Я знаю, как добавить значок в Visual Studio, но это не так, потому что я работаю над Digital Mars (мне нужно пошаговое руководство по командной строке, чтобы добавить значок, который, как я предполагаю, VS делает в фоновом режиме). Мой проект содержит файл ресурсов в виде Hello.rc
:
#include "resource.h"
MAINICON ICON "icon.ico"
MY_RESOURCE RCDATA "a.txt"
Файл заголовка ресурса как resource.h
:
#define MAINICON 101
#define RCDATA 256
#define ICON 257
#define MY_RESOURCE 300
И основной файл в виде Hello.cpp
:
#include <iostream>
#include <windows.h>
#include <cstdio>
#include "resource.h"
using namespace std;
void LoadFileInResource(int name, int type, DWORDamp; size, const char*amp; 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(MY_RESOURCE, RCDATA, size, data);
char snum[5];
// convert 123 to string [buf]
itoa(size, snum, 10);
// print our string
printf("%sn", snum);
/* 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: %sn", buffer); // Print as ASCII text
delete[] buffer;
return 0;
}
Я компилирую свой проект, используя следующие команды. В результате .exe
можно прочитать содержимое a.txt
, но значок не отображается.
rcc hello.rc
dmc hello.cpp hello.rc
Что-то не так с моим кодом или мне следует использовать другую команду?
Комментарии:
1. Не уверен, может быть, это поможет: digitalmars.com/faq.html#classexpress
2. Также здесь есть ссылка на компилятор ресурсов Digital Mars. Вероятно, вам нужно более подробно изучить их документацию, которая кажется довольно полной.
3. Я изучил части, связанные с
rcc.exe
, но не смог найти ничего полезного4.
ICON
иRCDATA
являются стандартными типами ресурсов, их не следует переопределять. Компилятор ресурсов должен распознатьICON
. Удалить#define ICON 257
. Поместите1 ICON "icon.ico"
файл ресурсов, скомпилируйте и свяжите. Обратите внимание, что Windows будет кэшировать значок для каждого файла, поэтому вы не узнаете, удалось ли вам это, пока не перезагрузите систему и кэш значков не очистится. Вы также можете скопировать / вставить * .exe-файл с другим именем, чтобы обмануть систему, чтобы она не использовала тот же кэш для этого файла.5. Я не знаком с этим компилятором. Используйте
-32
опцию для 32-разрядного ресурса — см. Ссылку . Ваш вывод * .exe 16-разрядный или 32-разрядный? Если он 32-разрядный, попробуйте использовать значок 256 цветов (помните, что изменения значка могут не отображаться до перезагрузки).