-1

我有一个功能:

SAFEARRAY FAR* pArray = NULL;

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

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

我怎么能得到它 int ?

老问题:

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

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

PVOID myData = pArray[0].pvData;

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

int myNbr = PtrToInt(myData);

但是我的 int (myNbr) 没有得到与调试器看到的相同的值。所以我的问题是我怎样才能从中获取数据,SAFEARRAY FAR* pArray或者PVOID不使用 MFC 函数SafeArrayAccessData,否则。

谢谢

4

1 回答 1

1

假设您的数组包含整数(用于SafeArrayGetVartype验证),是一维的(使用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

于 2014-02-12T16:26:20.603 回答