Josh,
This works for me. I think the documentation is a bit
confusing/convoluted. Rather than try to figure out what is wrong on
your end, it's just easier for me to show you what works on my end. Matt
is right that IXRawfile2 will work, but I know older versions are buggy
(from talking with the developers in Bremen). If IXRawfile4 works for
you, I suggest using it.
#include <iostream>
#import "XRawfile2.dll"
using namespace std;
int main(int argc, char* argv[]){
HRESULT lRet;
TCHAR pth[MAX_PATH];
XRAWFILE2Lib::IXRawfile4Ptr m_Raw;
CoInitialize( NULL );
HRESULT hr = m_Raw.CreateInstance("XRawfile.XRawfile.1");
if (FAILED(hr)) {
cout << "Cannot access XRawfile.dll" << endl;
return -1;
}
MultiByteToWideChar(CP_ACP,0,argv[1],-1,(LPWSTR)pth,MAX_PATH);
lRet = m_Raw->Open((LPWSTR)pth);
long nRet;
long i=1;
VARIANT varLabels;
VARIANT varFlags;
VariantInit(&varLabels);
VariantInit(&varFlags);
nRet = m_Raw->GetLabelData(&varLabels, &varFlags, &i);
cout << "GetLabelData: " << nRet << endl; //should be 0 if successful
int n;
int sz=varLabels.parray->rgsabound[0].cElements;
cout << "Array size: " << sz << endl;
double* pdval;
pdval=(double*)varLabels.parray->pvData;
for(n=0;n<sz;n++){
cout << pdval[n*6] << " " << pdval[n*6+1] << endl;
}
VariantClear(&varLabels);
VariantClear(&varFlags);
return 0;