我正在尝试在C#中创建一个COM dll,它有一个表示图像的byte []属性。我的想法是,一位同事正在编写一个C ++应用程序,它将使用我的dll与摄像头进行交互。
我的dll成功地允许他的程序连接到相机,返回各种值,但创建的SAFEARRAY似乎是不可读的(他得到一个数字的长度,但无法读取其实际数据)。 / p>
我是否在尝试以下面显示的方式将图像作为字节数组传出时做了些蠢事?
我是否需要明确告诉Visual Studio使用特定的编组类型,而不是让它自己选择?
我是否应该公开指向字节数组的指针,或者SAFEARRAY结构是否会处理这个问题。
我只用了几个月的C#,这是我第一次写一个COM dll,所以如果我错过了一些明显的东西,请耐心等待。我一直在研究问题1不是问题的前提,因为单独的C#测试应用程序可以成功重建图像。
课程(摘录):
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
public class ResultInfo : IResult
{
public byte[] ImageBytes
{
get
{
MemoryStream ms = new MemoryStream();
this.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] returnBytes = ms.ToArray();
ms.Close();
return returnBytes;
}
}
}
界面(摘录):
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface IResult
{
[DispId(5)]
byte[] ImageBytes { get; }
}
编辑:这是C ++方面的输出:
当我尝试使用HRESULT hr =来访问SAFEARRAY时 SafeArrayAccessData(图像和数据);返回的小时是E_UNEXPECTED - SafeArrayAccessData的文档说这是“安全的 数组无法锁定“