Я надеюсь, что кто-то сталкивался с подобной проблемой раньше и может дать мне подсказку, чтобы решить ее.
В Microsoft Visual C ++ 2005 у меня есть такой код в программе:
DWORD locator[FOURXFLAGCOUNT+1]={
0x58585858, 0x58585858, 0x58585858, 0x58585858, 0x58585858,
0x58585858, 0x58585858, 0x58585858, 0x58585858, 0x58585858,
0x58585858, 0x58585858, 0x58585858, 0x58585858, 0x58585858,
0x58585858, 0x58585858, 0x58585858, 0x58585858, 0x58585858,
0x58585858, 0x58585858, 0x58585858, 0x58585858, 0x58585858,
0x58585858, 0x58585858, 0x58585858, 0x58585858, 0x58585858,
0x58585858, 0x58585858, 0x58585858, 0x58585858, 0x58585858,
0x58585858, 0x58585858, 0x58585858, 0x00000000
};
Идея состоит в том, чтобы сделать locator
обнаруживаемым (и заполняемым) из вне программы - т.е. ее заполняет другая программа, так что эта программа будет встроена при запуске , Это для защиты от кражи, поэтому нет обычного способа получить данные, это нужно сделать примерно так.
Это прекрасно работало, когда я сам компилировал программу, но когда я добавил в нее статическую библиотеку, данные исчезли. Символ locator
все еще там; данные, с которыми он должен быть инициализирован (и которые должны быть видны снаружи), не являются.
Переключатель компоновщика / OPT: NOREF решает проблему, но по недопустимой цене: программа увеличивается на несколько сотен К (кажется, не так много, но в данном случае это так). Использование #pragma comment(linker, "/include:?locator@@BLAHBLAH")
(не помню, какой была часть "BLAHBLAH") ничего не сделало - символ locator
уже виден, он просто не инициализирован. Перемещение определения locator
в библиотеку также не помогает.
Отказ от статической библиотеки - последнее средство, я бы не стал этого делать, если бы мог избежать этого.
Есть идеи?