我的代码有一个非常奇怪的结果:
我正在使用boost.any
(之前使用void *
)从.exe中的.dll返回地址。
dll有这样的功能:
boost::any User::getNativeHandle() {
return boost::any(pimpl_->adressOfObject_);
}
我的exe,这样的代码:
class SomeClass {
public:
SomeClass(User & user) {
scopedResource_([&](InternalType * s) {
InternalTypeConstruct(..., user.getNativeHandle());
}
}
private:
ScopedResource<InternalType> scopedResource_;
};
事实和观察:
User
对象是在.exe中创建的,但它是一个dll类。/NODEFAULTLIB: ...
删除一些运行时库,但现在它似乎已正确设置。演员似乎从boost.any
回到我在.exe中的类型是正确的,因为我之前故意让它失败,以确保这一点。
从User::getNativeHandle
.dll返回的指针是一种类型,它是指向另一个库的类型的指针,一个没有任何.dll的.lib库,即一个真正的静态库。
它最终与SEH 0x00000005崩溃。我的类User
暴露了接口,我也试图为Pimpl导出Impl类,但似乎什么也没做。
有什么想法吗?这个错误让我很生气:)。