正在获取结构的实际大小

Getting actual size of struct

本文关键字:获取 结构      更新时间:2023-10-16

我有一个函数,它要求我传递一个指针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