Нарушение доступа при статическом вызове библиотеки - PullRequest
0 голосов
/ 16 сентября 2011

Как продолжение вопроса Неразрешенный внешний символ MSVC, связывающий исполняемые файлы .A содержит и класс P с двумя функциями-членами F и G, а также содержит глобальный P MyP.Я пытаюсь вызвать функции MyP.F из исполняемого файла T.Я наконец-то прошел через связующую часть, но теперь она не работает во время выполнения за исключением.

A.cpp

 struct P {
     void F();
     void G();
 } MyP;

 P::F() {
 }
 P::G() {
 }
 int main() {
     MyP.F();
     MyP.G();
 }

T.cpp

struct P {
     void F();
     void G();
} MyP;

int main() {
    MyP.F();
    MyP.G();
}

Я могупоставить точку останова в T в строке, где она вызывает F в Visual Studio 2008, но когда я нажимаю кнопку, чтобы войти или перешагнуть, я получаю исключение First-chance exception at 0xfe5ca589 in A.exe: 0xC0000005: Access reading location 0xfe5ca589.Когда я смотрю на стек вызовов, он показывает

fe5ca589 ()
A.exe! G () + 0x60a6 байт
[Кадры ниже могут быть неправильными и / или отсутствующими, нетсимволы, загруженные для A.exe]

Оба проекта являются частью одного и того же решения Visual Studio, и A правильно настроен как зависимость для T и, похоже, правильно связывается, ноЯ не могу вступить в это.У кого-нибудь есть идеи, как заставить Visual Studio загружать символы для A, чтобы я мог зайти в нее и найти ошибку?(Или, если что-то смешно связано с ошибкой?)

1 Ответ

1 голос
/ 16 сентября 2011

Исполняемые файлы не имеют метаданных, позволяющих загружать их по альтернативному адресу, и A.EXE не может загрузить в T.EXE по его желаемому адресу, потому что код T.EXE уже существует.

Вы можете обойти эту проблему, изменив адрес загрузки по умолчанию на A.EXE (при его создании это опция компоновщика), но правильное решение - использовать DLL. (Подтверждено, нет, вы не можете )

Предоставляются экспорты из файлов .EXE, позволяющие библиотекам подключаемых модулей вызывать функции в основном приложении.Они не предназначены для загрузки .EXE, как будто это DLL.

...