繁体   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