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