StillImage :: GetDeviceList指针

时间:2012-06-09 17:18:20

标签: c++ windows winapi pointers

我正在尝试在名为StillIamge的接口中调用名为GetDevicesList的方法调用,并且我将返回空结果。我认为这是一个指针问题,但我不是C ++专家,我认为这是问题所在。方法调用是:

HRESULT GetDeviceList(
  DWORD dwType,
  DWORD dwFlags,
  [out]  DWORD *pdwItemsReturned,
  [out]  LPVOID *ppBuffer
);

我知道它正在工作,因为当我插入和退出成像设备时,返回设备的nubmer上下移动。结果是空白的事实我认为是因为我没有得到正确的指示 - 有人可以快速查看并让我知道如果这是理由吗?

#include "stdafx.h"

bool debug = true;

int _tmain(int argc, _TCHAR* argv[])
{
    DWORD dwStiTotal = 0;
    PSTI pSti = NULL;
    HRESULT hres = StiCreateInstance(GetModuleHandle(NULL), STI_VERSION, &pSti, NULL);

    STI_DEVICE_INFORMATION deviceInfo[255];
    memset(deviceInfo,0, sizeof(deviceInfo));

    hres = pSti->GetDeviceList(NULL, NULL, &dwStiTotal, (LPVOID*) deviceInfo); 
    printf("number devices %d\n", dwStiTotal);
    for (int i=0; i<dwStiTotal; i++){
        printf("---------------------------------------------------\n");
        printf("type %d\n", deviceInfo[i].DeviceType);
        printf("vendor %s\n", deviceInfo[i].pszVendorDescription);
        printf("device %s\n", deviceInfo[i].pszDeviceDescription);
        printf("portname %s\n", deviceInfo[i].pszPortName);
        printf("PropProvider %s\n", deviceInfo[i].pszPropProvider);
        printf("LocalName %s\n", deviceInfo[i].pszLocalName);
        printf("InternalName %s\n", deviceInfo[i].szDeviceInternalName);
    }
    pSti->Release();

    if (debug){
        char key;
        std::cin >> key;
    }

    return 0;
}

非常感谢,并且很抱歉提出这样一个基本问题!

此致

尼尔

1 个答案:

答案 0 :(得分:1)

如果您检查GetDeviceList STI_DEVICE_INFORMATION* deviceInfo = NULL; hres = pSti->GetDeviceList(NULL, NULL, &dwStiTotal, (LPVOID*) &deviceInfo); ,那么 ppBuffer 的最后一个参数是(指针指向)句柄STI分配的缓冲区。你试图给它发送一个你自己分配的缓冲区,我相信这甚至会以某种方式崩溃......

无论如何,这是正确的方法

STI_DEVICE_INFORMATION

我们得到的是指向{em> STI 本身分配的LocalFree项数组的指针。完成后,您需要使用{{1}}发布它。