Ошибка RC2135 в проекте C ++ из-за кодировки файла RC UTF-8

После перехода с Visual Studio 2010 на 2012 я получил 10 ошибок RC2135, которые выглядели довольно странно в одном из моих проектов C ++.

Error   1   error RC2135: file not found: 0x06        NamedPipesNative.rc   19  1   NamedPipesNative
Error   2   error RC2135: file not found: 1           NamedPipesNative.rc   28  1   NamedPipesNative
Error   3   error RC2135: file not found: 5           NamedPipesNative.rc   29  1   NamedPipesNative
Error   4   error RC2135: file not found: 5           NamedPipesNative.rc   30  1   NamedPipesNative
Error   5   error RC2135: file not found: 0x17L       NamedPipesNative.rc   31  1   NamedPipesNative
Error   6   error RC2135: file not found: FILEOS      NamedPipesNative.rc   37  1   NamedPipesNative
Error   7   error RC2135: file not found: 0x2L        NamedPipesNative.rc   38  1   NamedPipesNative
Error   8   error RC2164: unexpected value in RCDATA  NamedPipesNative.rc   41  1   NamedPipesNative
Error   9   error RC2135: file not found: BLOCK       NamedPipesNative.rc   43  1   NamedPipesNative
Error   10  error RC2135: file not found: VALUE       NamedPipesNative.rc   45  1   NamedPipesNative

К сожалению, я предположил, что это как-то связано с переходом на VS 2012 (он спросил, хочу ли я преобразовать проект C ++ или нет), и я потратил много времени, пытаясь выяснить это на основе этого предположения. Но на самом деле это было что-то совершенно другое. В надежде помочь кому-нибудь еще, кто сталкивается с этой проблемой, я отправлю ответ через мгновение.

5

Решение

В рамках перехода на Visual Studio 2012 я также обновил номер версии программы в файле .rc, используя самодельную программу, которая обработала все мои файлы AssemblyInfo.cs и .rc, и она изменила кодировку. RC-файл из ANSI в UTF-8. И Microsoft Resource Compiler не может правильно читать файлы UTF-8!
http://social.msdn.microsoft.com/Forums/hu-HU/vcgeneral/thread/e212069d-678e-4ac8-957f-7d60d3e1c89f

Поэтому решение заключается в том, чтобы перекодировать файл .rc в формат ANSI или UTF-16.

11

Другие решения

Если вы пообещаете всегда вручную редактировать файл .rc, вы можете поместить это в начало, и компилятор ресурсов скомпилирует utf-8 как ангел,

#pragma code_page(65001)

Но как только редактор ресурсов VS сможет восстановить файл .rc, все будет испорчено.

2

Вы также можете использовать Командная строка события перед сборкой конвертировать исходный файл UTF-8 перед компиляцией.

Примеры шагов:

  1. исключить ваш файл UTF-8 из компиляции.

  2. сделайте копию вашего файла UTF-8, переименуйте его

  3. добавьте запись в командной строке события Pre-build, преобразовав исходный файл UTF-8 в переименованный файл как UNICODE. Этот инструмент может помочь вам.

    $ (ProjectDir) \ tools \ uniconv.exe UTF8 $ (ProjectDir) \ DocumentBrowserUTF8.rc UCS2 $ (ProjectDir) \ DocumentBrowser.rc

  4. в ваших сценариях сборки (во многих случаях Visual Studio .vcxproj файл) сделайте так, чтобы он компилировал преобразованный файл вместо исходного файла UTF-8.

1
По вопросам рекламы [email protected]