Терминатор RCDATA - PullRequest
       14

Терминатор RCDATA

0 голосов
/ 24 октября 2008

У меня есть файл .rc, который используется для включения некоторых текстовых данных в мой исполняемый файл, например:

1234 RCDATA myfile.txt

Это прекрасно работает: содержимое файла myfile.txt включено в мой исполняемый файл. Проблема в том, что в строку не добавляется терминатор 0, и я не могу добавить его в файл. Есть ли способ добавить 0-терминатор из файла .rc? Примерно так:

1234 RCDATA { myfile.txt, "\0" }         // error RC2104

Обратите внимание, что я уже нашел это решение, но я ищу что-то более элегантное.

1234 RCDATA myfile.txt
1235 RCDATA { "\0" }

Большое спасибо, Eli

Ответы [ 3 ]

2 голосов
/ 24 октября 2008

Я так не думаю, если вы не напишите свой собственный компилятор ресурсов.
Я не встречал тот, который позволял бы построить один ресурс из нескольких источников.
Вы можете написать небольшую утилиту для добавления завершающего символа '\ 0' в файл, например makeZ.exe,
и установите дополнительный шаг сборки:

makeZ myfile.txt myfileZ.txt

В тебе .rc будет

 1234 RCDATA myfileZ.txt
0 голосов
/ 27 октября 2008

Вам лучше поставить конечный символ в самом файле. Если myfile.txt хранится в ANSI, вам нужен один завершающий байт, если myfile.txt хранится в Unicode, вам нужно два конечных байта, и ваш оператор RCDATA не может включить его.

0 голосов
/ 27 октября 2008

В качестве альтернативы вы можете посмотреть на встраивание данных в сам RC, согласно этому фрагменту из руководства GORC :

0x3333 RCDATA
BEGIN
  "Hello world"
  "Hello world (zero terminated)\0"
  L"A Unicode version of the above\0"
  0x9999  ;hex number stored as a word
END

MyRes RCDATA
BEGIN
  1034  ;decimal number stored as a word
END

MyRes MyResType
BEGIN
  10456L  ;decimal number stored as a dword
  1234L,56666L,99999L  ;decimal numbers stored as dwords
END

34h 100h
BEGIN
  33hL,34hL,35hL,36hL  ;hex numbers stored as dwords
  0x37L,0x38L,0x39L,0x40L  ;C-style hex numbers stored as dwords
END 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...