Линкер Visual Studio не реагирует на /SECTION

Тема в разделе "LANGS.C", создана пользователем TermoSINteZ, 16 июл 2011.

  1. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.548
    Адрес:
    Russia
    Приветствую всех.
    Возникла необходимость определенную переменную поместить в отдельную секцию с атрибутами RW.
    Привожу код
    Код (Text):
    1. #pragma once
    2.  
    3. #define WIN32_LEAN_AND_MEAN
    4. #include <windows.h>
    5.  
    6. #pragma data_seg(push, RWData, ".depu")
    7.  
    8. static LPSTR rgFuncs[7][7] = {
    9.  
    10.     { "Abcde", "GDFK", "ppprogfd" }
    11.  
    12. };
    13.  
    14. #pragma data_seg(pop, RWData)
    15. #pragma comment(linker, "/SECTION:.depu,RWE")
    16.  
    17.  
    18. int APIENTRY WinMain(HINSTANCE hInstance,
    19.                      HINSTANCE hPrevInstance,
    20.                      LPTSTR    lpCmdLine,
    21.                      int       nCmdShow)
    22. {
    23.     *rgFuncs[0][0] = 'c';
    24.  
    25.     MessageBoxA(0,rgFuncs[0][0],0,0);
    26.  
    27.     ExitProcess(0);
    28.  
    29.     return 0;
    30. }
    Пользуюсь 2008 Студией. Вроде как все ок. Если переменная в секции RW, то код должен сработать. Но оказывается, что студия не помещает переменную в отдельную секцию.
    Почему так?

    Прошу вас проверить на других студиях, либо дать комментарии этой странности.
    Добавлю, если же переменную сделать так:
    Код (Text):
    1. ....
    2.  
    3. static char rgFuncs[7] = {
    4.  
    5.    'a','b','c','\0'
    6.  
    7. };
    8.  
    9. ....
    10.  
    11. //обращение
    12. rgFuncs[0] = 'c';
    В этом случае все работает. Переменная перемещается в новую секцию.

    То есть, второе условие - не менять изначальный код переменной (остальное менять можно, главное чтоб смысл оставался).
     
  2. RedLord

    RedLord Member

    Публикаций:
    0
    Регистрация:
    23 июн 2005
    Сообщения:
    183
    Адрес:
    Ukraine
    static __declspec(allocate(".depu")) char rgFuncs[]

    не спасет?
     
  3. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.548
    Адрес:
    Russia
    RedLord
    Пробовал. Не помогает в первом варианте (во втором проблемы изначально нету).
     
  4. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Сама rgFuncs в .depu(rw), но указатели адресуют .rdata. Оно и понятно, "Abcde" это const char*, тут уж ничего не попишешь.
    Мне представляется единственный вариант:
    Код (Text):
    1. static char rgFuncs[][3][20] = {
    2.     { "Abcde", "GDFK", "ppprogfd" }
    3. };
    Тогда компилер встроит строки непосредственно в массив.
     
  5. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.548
    Адрес:
    Russia
    Booster
    Спасибо большое. Думаю это то, что нужно.