interface IImageService : IDispatch{
[id(1), helpstring("方法QueryImage")] HRESULT QueryImage([out] VARIANT* imagedata, [out,retval] VARIANT* imglength);
};
STDMETHODIMP CImageService::QueryImage(VARIANT* imagedata, VARIANT* imglength)
{
// TODO: 在此添加实现代码
FILE *file = fopen("d:\\test.png","rb");
if (file == NULL) return S_FALSE;
fseek(file, 0, SEEK_END);
fpos_t pos;
fgetpos(file, &pos);
fseek(file, 0, SEEK_SET);
int length = (int)pos;
VariantInit(imglength);
imglength->vt = VT_I4;
imglength->lVal = length;
VariantInit(imagedata);
SAFEARRAY *psa = SafeArrayCreateVector(VT_UI1, 0, length); //unsigned char
fread(psa->pvData, 1, length, file);
fclose(file);
imagedata->vt = VT_ARRAY | VT_UI1;
imagedata->parray = psa;
return S_OK;
}
C#调用:
object imagedata;
object imglen = imgService.QueryImage(out imagedata);
byte[] buffer = (byte[])imagedata;
int len = (int)imglen;