如何将PVOID转换为int?

时间:2014-02-12 15:44:10

标签: c++ mfc safearray

我有一个功能:

SAFEARRAY FAR* pArray = NULL;

我得到了这个功能: pServer1->GetDirectMemory(dwAddrBegin, dwAddrEnd, wDisplayWidth, &pArray);

我想从pArray获取信息,如果我查看它的结构,我PVOID pvData;必须包含我的信息。

我怎么能在int中得到它?

旧问题:

我想将PVOID的数据转换为int值

我得到一个SAFEARRAY FAR* pArray,我只有一个元素,所以我得到了一个像这样的PVOID类型:

PVOID myData = pArray[0].pvData;

我尝试使用PtrToInt函数获取数据:

int myNbr = PtrToInt(myData);

但我的int(myNbr)并没有得到我用调试器看到的相同值。 所以我的问题是如何在不使用SAFEARRAY FAR* pArray之类的MFC功能的情况下从PVOIDSafeArrayAccessData获取数据。

由于

1 个答案:

答案 0 :(得分:1)

假设您的数组包含整数(使用SafeArrayGetVartype验证),是1维(使用SafeArrayGetDim)和0(使用SafeArrayGetLBound),访问它的正确方法是这样的:

int value;
LONG indices[] = { 0 };
if (FAILED(SafeArrayGetElement(pArray, indices, &value))) {
  // getting element failed - probably bad index
}
// value now contains the correct value

您也可以使用SafeArrayAccessData,但除非您发现了性能问题,否则最好不要这样做。

通常在处理OLE结构(VARIANTSAFEARRAY等)时,应始终使用提供的实用程序函数。它们是Windows的一部分,而不是MFC。这是数组的参考:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms221145(v=vs.85).aspx

但是,如果可以,我强烈建议您使用ATL的SAFEARRAY包装器,CComSafeArray。请参阅文档和一篇显示其用法的简短博客文章:

http://msdn.microsoft.com/en-us/library/3xzbsee8.aspx http://msmvps.com/blogs/gdicanio/archive/2011/02/04/simplifying-safearray-programming-with-ccomsafearray.aspx