我正在尝试在名为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;
}
非常感谢,并且很抱歉提出这样一个基本问题!
此致
尼尔
答案 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}}发布它。