gpt4 book ai didi

c++ - StillImage::GetDeviceList 指针

转载 作者:行者123 更新时间:2023-11-28 08:02:46 26 4
gpt4 key购买 nike

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

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

我知道它在工作,因为当我插入和拔出成像设备时,退回设备的数量会上下波动。结果是空白的事实我认为是由于我没有得到正确的指针 - 有人可以快速看一下并告诉我是否是这个原因吗?

#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;
}

非常感谢您提出这样一个基本问题!

问候,

尼尔

最佳答案

如果您检查 reference对于 GetDeviceList,最后一个参数 ppBuffer(指向 a 的指针) STI 分配 缓冲区的句柄。你正试图向它发送一个你自己分配的缓冲区,我相信这甚至应该以某种方式崩溃......

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

STI_DEVICE_INFORMATION* deviceInfo = NULL;
hres = pSti->GetDeviceList(NULL, NULL, &dwStiTotal, (LPVOID*) &deviceInfo);

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

关于c++ - StillImage::GetDeviceList 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10962982/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com