簡體   English   中英

靜態庫調用上的訪問沖突

[英]Access violation on static library call

作為問題的擴展, MSVC未解決的外部符號鏈接可執行文件 A包含一個具有兩個成員函數FG的類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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM