0

StillIamge というインターフェイスで 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;
}

このような基本的な質問をして申し訳ありません!

よろしく、

ニール

4

1 に答える 1

1

の参照を確認するGetDeviceListと、最後のパラメーターppBufferは、 STI 割り当てバッファーへの(へのポインター)ハンドルです。自分で割り当てたバッファを送信しようとしていますが、これは何らかの形でクラッシュするはずだと思います...

とにかく、ここにそれを行う適切な方法があります

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

そして返されるのは、 STI自体STI_DEVICE_INFORMATIONによって割り当てられた項目の配列へのポインターです。作業が完了したら、 で解放する必要があります。LocalFree

于 2012-06-09T17:38:23.913 に答える