1

関数を使用しようとしていますIBidispl2->SendRecvXMLが、未処理の例外エラーが発生し続けます。

私は C++ が非常に苦手であることを最初に認めましたが、読み方は知っており、IBiDiSpl2 関数の例やより良い説明を見つけようとしましたが、行き止まりになりました。

これをデバッグしようとすると、このエラーが発生します

V4BiDiTest.exe の 0x69D82C10 (bidispl.dll) で未処理の例外: 0xC0000005: 場所 0xCCCCCCD0 を読み取るアクセス違反。

ここに私が取り組んでいるコードがあります:

#include "stdafx.h"
#include "BiDiSpl.h"
#include "comutil.h"

#include <iostream>
#include <vector>
#include <comdef.h>
#include <stdio.h>

using namespace std;

int main(int argc, char* argv[])
{
    // verify atleast 3 args ( prog.exe <printername> query1....)
    if(argc < 3)
    {
         cout << "ERROR: invalid usage, not enough arguments"<< endl << 
            "USAGE: V4BiDiTest.exe <printername> \"query1\" [\"query2\"] ... "     << endl <<
            "Please rerun the application";
         return 1;
    }

    // set the first arg after the exe to the printer name 
    string printer = argv[1];
    std::wstring stemp = std::wstring(printer.begin(), printer.end()); 
    LPCWSTR pPrinter = stemp.c_str();

    HRESULT hr;
    DWORD dwAccess;
    IBidiSpl2 *pIBidiSpl2 = NULL;
    dwAccess = BIDI_ACCESS_USER;

    // build the request schema with all other args after argv[1] 
    char* getSch = "<bidi:Get     xmlns:bidi=\"http://schemas.microsoft.com/windows/2005/03/printing/bidi\">";
    _bstr_t bstrt(getSch);

    for (int i = 2; i < argc; i++)
    {
        bstrt+="<Query schema=\'";
        char *argStr =argv[i];
        bstrt+=argStr;
        bstrt+="\'/>";
    } 
    bstrt+="</bidi:Get>";

    hr = CoInitializeEx (NULL, COINIT_MULTITHREADED) ;
    hr = CoCreateInstance(CLSID_BidiSpl,
            NULL, 
            CLSCTX_INPROC_SERVER,
            IID_IBidiSpl, 
            (void**)&pIBidiSpl2) ;

    if (pIBidiSpl2 == NULL)
    { 
        cerr << "CoCreateInstance failed" << endl; 
        return 1; 
    }


    hr = pIBidiSpl2->BindDevice(pPrinter,dwAccess);
    //Test hr here
    if (hr!=0){ cout << "failed on bind" <<endl; return 1;}

    BSTR responce;
    BSTR test1 = ::SysAllocString(L"<bidi:Get xmlns:bidi=\"http://schemas.microsoft.com/windows/2005/03/printing/bidi\"><Query schema='\\Printer'/></bidi:Get>");

    // I get the error when the following line executes
    hr = pIBidiSpl2->SendRecvXMLString(test1, &responce);
    //Test hr here
    if (hr!=0){cout << "failed on send" <<endl;return 1;}
    cout << responce << endl;
    ::SysFreeString(test1);
    ::SysFreeString(responce);

    hr = pIBidiSpl2->UnbindDevice();
    // test hr here
    if (hr!=0){cout << "failed on unbind" <<endl;return 1;}
    cout << "Successfully unbound device" << endl;

    return 0;
}
4

1 に答える 1

0

変えてみる

hr = CoCreateInstance(CLSID_BidiSpl,
        NULL, 
        CLSCTX_INPROC_SERVER,
        **IID_IBidiSpl,**
        (void**)&pIBidiSpl2) ;

hr = CoCreateInstance(CLSID_BidiSpl,
        NULL, 
        CLSCTX_INPROC_SERVER,
        **IID_IBidiSpl2,** 
        (void**)&pIBidiSpl2) ;
于 2013-03-13T17:31:12.787 に答える