[英]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.