获得struct的实际大小

时间:2014-08-31 01:58:53

标签: c++ winapi struct

我有一个函数,要求我传递指针LPVOID和尺寸DWORD

这些值将由VirtualAllocEx使用。

如何获得struct的完整实际尺寸?

STRUCT:

typedef struct CLRStartUpInfo
{
    LPCSTR pwzLibrary;
    LPCSTR pwzTypeName;
    LPCSTR pwzEntryPoint;
    LPCSTR pwzArgument;
} CLRStartUpInfo, *PCLRStartUpInfo;

我打电话的功能:

HRESULT CallRemoteFunction(HANDLE hProcess, LPVOID lpFunction, LPVOID lpParameter, DWORD dwParameterSize)

2 个答案:

答案 0 :(得分:-1)

您可以使用sizeof(CLRStartUpInfo)获取它。 Windows OS将填充字节添加到struct,如果它不是4(32位)的倍数。因此,如果您的实际结构大小为7,它将添加1个字节并使其为8.

为避免您使用#pragma pack (1),它会限制填充。

答案 1 :(得分:-1)

pragma preprocessor命令可用于将事物打包到字节边界。您尝试更改打包的任何操作都必须使用特定于环境的预编译器指令。不同的编译器有不同的打包规则。

#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