我有一个包含以下类的 DLL:
目录.h:
#ifndef CAT_H
#define CAT_H
class __declspec( dllexport ) Cat
{
class CatImpl; // Not defined here
CatImpl *cat_; // Handle
public:
Cat();
int a;
};
#endif
猫.cpp:
#include "Cat.h"
class Cat::CatImpl
{
public:
int c1;
int c2;
};
Cat::Cat()
{
cat_ = new Cat::CatImpl();
cat_->c1 = 1;
}
然后我有一个项目(在单独的解决方案中)创建此类的实例:
主要.cpp:
#include <Windows.h>
#include "..\..\DLL\DLL\Cat.h"
int CALLBACK WinMain(
_In_ HINSTANCE hInstance,
_In_ HINSTANCE hPrevInstance,
_In_ LPSTR lpCmdLine,
_In_ int nCmdShow
)
{
Cat cat;
int x = 0;
}
现在我在该行放置一个断点:
int x = 0;
符号已加载,*(cat.cat_) 不起作用:
有什么办法可以查看cat_的内容吗?
到目前为止我想出的唯一方法是:
(int)(*((char*)cat.cat_ + 0))
另外,为什么以下返回 0?:
最佳答案
解决此问题的方法是在值上添加一个监视,您可以在其中 "cast"它到包含 impl 的 DLL。所以在你的情况下就是这样。
(DLL.dll!Cat::CatImpl*)cat.cat_
关于c++ - 在 Visual Studio 中调试 PIMPL(2012),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22972317/