関数を使用しようとしています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;
}