正在获取结构的实际大小
Getting actual size of struct
我有一个函数,它要求我传递一个指针LPVOID
和一个大小DWORD
这些值将由CCD_ 3使用。
如何获得struct
的完整实际尺寸?
结构:
typedef struct CLRStartUpInfo
{
LPCSTR pwzLibrary;
LPCSTR pwzTypeName;
LPCSTR pwzEntryPoint;
LPCSTR pwzArgument;
} CLRStartUpInfo, *PCLRStartUpInfo;
我调用的函数:
HRESULT CallRemoteFunction(HANDLE hProcess, LPVOID lpFunction, LPVOID lpParameter, DWORD dwParameterSize)
您可以使用sizeof(CLRStartUpInfo)
获得它。如果结构不是4(32位)的倍数,Windows操作系统会向其添加填充字节。因此,如果您的实际结构大小是7,它将添加1个字节并使其为8。
为了避免您可以使用#pragma pack (1)
,它将限制填充。
pragma预处理器命令可以用于将东西打包到字节边界。您试图更改打包的任何操作都必须使用特定于环境的预编译器指令。不同的编译器有不同的打包规则。
#pragma pack(1)
struct test
{
char ch; // 1 byte
int i; // 4 bytes
}sample1, sample2;
#pragma pack
// Here is a complete function that compiles
int main()
{
std::cout << "sizeof(sample1)" << sizeof(sample1) << std::endl;
return 0;
}
我通过简单的谷歌搜索找到了这个。这是MSDN的页面。请务必仔细阅读警告。手动打包后,有时会出现难以理解的对齐问题。我自己并不完全理解这些问题。http://msdn.microsoft.com/en-us/library/2e70t5y1(VS.80).aspx
相关文章:
- 从字符串中获取结构的大小
- 获取结构 c++ 中元素的索引
- 如何获取结构C++的输入
- 使用加速融合获取结构名称
- 如何使用值获取结构的索引
- 如何获取结构体成员的地址
- 从行分析中获取结构
- 获取结构的 UUID
- 如何从 QMetaType 获取结构成员的名称
- 在发送/获取结构时使用 streambuf
- 无法获取结构 C# 的指针
- 如何在LLVM中获取结构成员的值?
- 如何从命名管道获取结构化数据并将其写入Qt中的qtableview
- 如何获取结构的元素作为类型提升::shared_ptr
- C++-如何获取结构的最后一个成员类型以及从现有对象访问它的方法
- 在c++中获取结构的参数名称
- 当我尝试获取结构成员的地址时,会发生奇怪的事情
- 获取结构数组 c++ 中的元素数
- 如何获取结构或类的尾随填充的大小
- 正在获取结构的实际大小