[英]Access violation on static library call
作為問題的擴展, MSVC未解決的外部符號鏈接可執行文件 。 A
包含一個具有兩個成員函數F
和G
的類P
,還包含一個全局P MyP
。 我試圖從可執行T
調用函數MyP.F
我終於跳過了鏈接部分,但是現在它在運行時由於異常而失敗。
丙型肝炎
struct P {
void F();
void G();
} MyP;
P::F() {
}
P::G() {
}
int main() {
MyP.F();
MyP.G();
}
丙型肝炎
struct P {
void F();
void G();
} MyP;
int main() {
MyP.F();
MyP.G();
}
我可以在Visual Studio 2008中調用F
的行中的T
處放置一個斷點,但是當我按下該按鈕進入或越過時,我First-chance exception at 0xfe5ca589 in A.exe: 0xC0000005: Access reading location 0xfe5ca589
獲得了異常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
的符號,以便我可以介入並發現錯誤? (或者,如果鏈接的東西有趣導致錯誤?)
可執行程序不具有允許它們在備用地址加載的元數據,並且A.EXE
不能加載到T.EXE
在其期望的地址,因為T.EXE
的代碼已經存在。
您可能可以通過更改
(確認, 不,你不能 ) A.EXE
的默認加載地址來解決此
A.EXE
(在構建它時,它是一個鏈接器選項),但是正確的解決方案是使用DLL。
提供從.EXE
文件的導出,以允許插件DLL調用主應用程序中的函數。 它們並不意味着允許像加載DLL一樣加載.EXE
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.