Hallo Entwickler,
ich hänge seit geraumer Zeit an einem Problem mit einem
ActiveX-Control das mir ein OLEVarinat zurückgibt, aber dahinter stehen 4096 Bytes.
In der .tlb sieht das ganze so aus:
function GetData(var RtnData: OleVariant; var RtnLen: OleVariant): Integer; dispid 26;
in C++ funktioniert das Lesen so:
void COcxDlg::OnBtnGetConfiguration()
{
// TODO: Add your control notification handler code here
VARIANT varData,vatLen;
char szBuf[5000];
int nLen;
memset(szBuf,0,5000);
m_RichEdit.vSetRamContext((unsigned char *)szBuf,4096);
long nRtn = m_Ocx.GetData(&varData,&vatLen);
if(nRtn == FALSE)
{
AfxMessageBox("Read Data Error");
return;
}
nLen = vatLen.lVal;
memcpy(szBuf,varData.pcVal,nLen);
m_RichEdit.vSetRamContext((unsigned char *)szBuf,4096);
}
ich habe es wie folgt versucht:
var
ReadData,BytesRead:Olevariant;
...
isDataRead:=myOcx.GetData(ReadData,BytesRead);
...
Der Wert in BytesRead stimmt, aber in ReadData steht immer nur 0, wenn ich mit einem POLEVariant Pointer arbeite und die Bytesread einlese, dann steht da nur Grütze.
Kann mir jemand auf die Sprünge helfen?
Vielen Dank....