의()를 호출에서 빈 변형을 받고는,이처럼 보이는 OLE 메소드를 호출하기 위해 노력하고있어 충돌없이OLE 자동화 : 내가 전화를 다음 코드를 사용</p> <pre><code>HRESULT GetFirstMono( [out] BSTR* name, [out, retval] BSTR* monoID); </code></pre> <p>을 대신 유효한 결과
int cArgs = 1;
DISPPARAMS dp = { NULL, NULL, 0, 0 };
DISPID dispidNamed = DISPID_PROPERTYPUT;
DISPID dispID;
VARIANT *pArgs = new VARIANT[cArgs+1];
// Extract arguments...
for(int i=0; i<cArgs; i++) {
pArgs[i] = va_arg(marker, VARIANT);
}
// Build DISPPARAMS
dp.cArgs = cArgs;
dp.rgvarg = pArgs;
// Make the call!
hr = pDisp->Invoke(dispID, IID_NULL, LOCALE_SYSTEM_DEFAULT, nType, &dp,
pvResult, NULL, NULL);
if(cArgs == 1) {
std::cout << "oleCall()" << std::endl;
std::cout << "vt: " << dp.rgvarg[0].vt << std::endl;
}
프로그램 excecutes을, 그리고 나는 가 pvResult
에 출력 BSTR *를 모노 이드 수신 (그리고 내가 기대하는 가치를 얻을) : 그것은 (http://www.codeproject.com/KB/office/MSOfficeAuto.aspx에서 적응). 하지만 그 대신 이름을 찾는, 나는 단지 내가
oleCall()
vt: 0
를 참조 내 터미널에서 즉,
dp:rgvarg[0]
의 빈 변형을 얻는다. LabView에서 호출 할 때 똑같은 메서드가 제대로 작동하므로 문제가 내 코드의 어딘가에 있음을 알 수 있습니다.
이름을 출력으로 복구하려면 어떻게해야합니까?
는'dp.cArgs'이 값을 포함하지 않나요 인수 (나는 mean'dp.cArgs의 =의 cArgs +를 1') 유형
VT_BSTR|VT_BYREF
을 설정하려고? 이 메서드는 두 개의 매개 변수를 필요로하기 때문입니다. 도움이되지 않는다면 :'Invoke'의'HRESULT' 리턴 값을 확인하십시오. – vstm왜 나는 확실하지 않지만,'dp.cArgs = cArgs + 1'을 설정하면 프로그램이 충돌합니다. 늘어나는만큼, * retval *로 표시된 매개 변수는 변형 된'pvResult'와 함께 반환됩니다. 다른 하나는'dp '를 통해 리턴되어야한다. 나는 오류 관리에만 사용되기 때문에 내가 원하는 결과가 HRESULT에 있지 않을 것이라고 확신한다. – xqrp