Visual Studio 2015 переименовывает мою функцию?Как мне это остановить? - PullRequest
1 голос
/ 10 июля 2019

У меня есть библиотека, которая реализует два класса, давайте назовем их A и B. A имеет функцию GetMessage(), которая возвращает указатель на экземпляр класса B:

class A
{
    ...

    B *GetMessage();
};

Библиотека прекрасно работает. Я использую файл .defs для экспорта символа.

У меня есть программа, которая создает экземпляр A и вызывает GetMessage(). Это хорошо компилируется, но во время соединения я получаю сообщение об ошибке:

error LNK2019: unresolved external symbol "public: class B * __thiscall A::GetMessageA(void)" ... etc. etc.

Если я изменю настройки своего проекта для использования Юникода, то получаю сообщение об ошибке:

error LNK2019: unresolved external symbol "public: class B * __thiscall A::GetMessageW(void)" ... etc. etc.

Если вы не можете определить ошибку, GetMessage() был переименован в GetMessageA() в первой ошибке и GetMessageW() во второй.

Я вижу, что происходит. Visual Studio полностью игнорирует тот факт, что функция GetMessage НЕ является функцией Microsoft, и что-то где-то модифицирует имя функции, чтобы направить вызов функции к правильной реализации на основе моей настройки проекта multi-char / unicode. Однако эта функция никоим образом не возвращает и не обрабатывает текст, это не функция Microsoft, которая поддерживает двойную реализацию, и я ничего не сделал в своем исходном коде, чтобы указать, что это так.

Я НЕ собираюсь разрушать мой совершенно хороший код, переименовывая функцию только для того, чтобы обойти глупость Microsoft.

Как остановить Visual Studio от переименования моей функции при компиляции?

---- UPDATE ----

Следующее работает, но есть ли настройка проекта или что-то, что я могу использовать вместо этого. Предполагается, что этот код является кросс-платформенным кодом, совместимым с Posix, который не содержит хитрых взломов Microsoft!

#ifdef GetMessage
// Microsoft have a #define somewhere that redefines GetMessage() to GetMessageA() or GetMessageW()
// and then nobody can link to this library. If I ever get my hands on a functioning time machine then
// number 1 on the agenda is preventing Microsoft from ever being founded. They are constantly forcing
// me to put kludgy hacks like this into my beautiful code!
#undef GetMessage
#endif
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...