Объединить строку в файле ресурсов и передать ее в строку пункта меню (winapi) c ++ - PullRequest
0 голосов
/ 31 августа 2018

Я пишу приложение win32, используя winapi и я хочу объединить строку в моем файле ресурсов и дать стимул моему пункту меню в качестве строки, которую он должен показать. когда я хочу передать управление, оно работает как шарм, но когда я хочу используйте это для menuItem, я получаю сообщение об ошибке. это может быть мне, потому что препроцессор не видит конкатенацию как строку?

Кто-нибудь знает, что я могу попробовать? там был аналогичный пост, за которым я пытался следовать - но он дает мне тот же результат ...

другие посты так:

Объединение строки и константы в файле ресурсов в C ++ (MFC)

Конкретное определение и строка в ресурсах

C / C ++ Конкатенация макросов

когда я следовал этим ответам, я получал "ID_ABOUT_STR" в качестве своего вывода вместо значения этого большую часть времени ... а еще я получал ошибку ...

Надеюсь, вопрос ясен и заранее благодарю за усилия :) 1021 *

.rc Файл:

IDR_MENU1 MENU
BEGIN
    POPUP L"System"
    BEGIN
        MENUITEM ID_EXIT_STR, ID_SYSTEM_EXIT
        MENUITEM SEPARATOR
        MENUITEM ID_ABOUT_STR, ID_SYSTEM_ABOUT //here i want to give it the ID_ABOUT_STR which is in the resource file... 
    END
END

resource.h: VER_PRODUCTNAME_STR, а другой просто содержит строки, а также

#define ID_ABOUT_STR                 L"About" VER_PRODUCTNAME_STR L" " VER_FILE_DESCRIPTION_STR

Это ошибка, которую я получаю:

Error       RC2122  unknown menu subtype                PRO-PRODUCITON      C:\XXX.rc       195 
Error       RC2125  expected ID value for menu item     PRO-PRODUCITON      C:\XXX.rc       195 

1 Ответ

0 голосов
/ 02 сентября 2018

Проблема в расширении L с моей точки зрения. Код должен компилироваться без префикса L "...".

И как показывают ваши ссылки, эти макросы работают без проблем в компиляторе RC

#define CONCAT(a,b) a##b
#define STRINGIZE_(x) #x
#define STRINGIZE(x) STRINGIZE_(x)

В качестве примера это работает для подписи в диалоге

CAPTION STRINGIZE(CONCAT(Concat,Title))

Но они не используют префикс L "..."

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...