因为近期工作需要完成OCX控件同时支持C#与C++调用,所以接口设置就会遇上些问题。在需要将图片的内存数据(buffer)传入控件时,如果按照C++惯例,设计接口参数类型为unsigned char*,就会存在被C#识别为ref byte的参数,这样就只能够传递一个像素的数据(8bit灰度图像)。
这么一来,就需要使接口参数类型能够成功传递一个buffer数组,那么就想到了VARIANT类型,它可以将数组封装起来,包含数组的维度与长度以及类型信息。这样一来就可以满足要求了。
根据CImage类获得图像数据(BYTE数组):
///打开图片
CImage img;
img.Load(csName);
///获得图像数据
int pitch = img.GetPitch();