请教大家如何在C#中导入如下的函数,这个函数在c++写的dll中:
extern __declspec(dllimport) BOOL WINAPI GetOutputBMPdata(UCHAR const **  pData, BITMAPINFO const ** pInfo);如果用c#调用DllImport应该怎么写?主要是类型要正确,UCHAR对应byte但是不知道UCHAR const **这个二维的图像数据矩阵要怎么转换,还有是不是要在C#里把BITMAPINFO也重构出来啊,这个应该不是很必要,毕竟C#有Bitmap和BitmapData可以用。请求大家的帮助,谢谢 

解决方案 »

  1.   

    这个函数功能是获取输出的256色位图数据,用于在View中绘图的
    如下:
    const UCHAR * pBmpData=NULL, * pColorBarData=NULL;
    const BITMAPINFO * pBmpInfo=NULL, * pColoarBarInfo=NULL;

    if ( !MAG_GetOutputBMPdata(&pBmpData, &pBmpInfo) ||
    !MAG_GetOutputColorBardata(&pColorBarData, &pColoarBarInfo))
    {
    MAG_UnLockFrame();
    MemDC.SelectObject(pOldBit);
    MemBitmap.DeleteObject();
    MemDC.DeleteDC();
    return;
    }StretchDIBits(MemDC.GetSafeHdc(), 5, 5, BMPWIDTH, BMPHEIGHT, 
    0, 0, BMPWIDTH, BMPHEIGHT, 
    pBmpData, pBmpInfo,
    DIB_RGB_COLORS, SRCCOPY);
      

  2.   

    http://blog.csdn.net/lifeilin6671/article/details/8287271
    难道是用ref byte[] ?
      

  3.   

    /// <summary>
    /// 封送C++中的BITMAPINFOHEADER结构。
    /// </summary>
    [StructLayout(LayoutKind.Sequential)]
    public struct BitmapInfoHeader
    {
        [MarshalAs(UnmanagedType.I4)]
        public Int32 biSize;
        [MarshalAs(UnmanagedType.I4)]
        public Int32 biWidth;
        [MarshalAs(UnmanagedType.I4)]
        public Int32 biHeight;
        [MarshalAs(UnmanagedType.I2)]
        public short biPlanes;
        [MarshalAs(UnmanagedType.I2)]
        public short biBitCount;
        [MarshalAs(UnmanagedType.I4)]
        public Int32 biCompression;
        [MarshalAs(UnmanagedType.I4)]
        public Int32 biSizeImage;
        [MarshalAs(UnmanagedType.I4)]
        public Int32 biXPelsPerMeter;
        [MarshalAs(UnmanagedType.I4)]
        public Int32 biYPelsPerMeter;
        [MarshalAs(UnmanagedType.I4)]
        public Int32 biClrUsed;
        [MarshalAs(UnmanagedType.I4)]
        public Int32 biClrImportant;
    }/// <summary>
    /// 封送C++中的BITMAPINFO结构。
    /// </summary>
    [StructLayout(LayoutKind.Sequential)]
    public struct BitmapInfo
    {
        [MarshalAs(UnmanagedType.Struct, SizeConst = 40)]
        public BitmapInfoHeader bmiHeader;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1024)]
        public Int32[] bmiColors;
    }
      

  4.   


    [StructLayoutAttribute(LayoutKind.Sequential)]
    public struct BITMAPINFO
    {
        /// BITMAPINFOHEADER->tagBITMAPINFOHEADER
        public BITMAPINFOHEADER bmiHeader;    /// RGBQUAD[1]
        [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 1, ArraySubType = UnmanagedType.Struct)]
        public RGBQUAD[] bmiColors;
    }[StructLayoutAttribute(LayoutKind.Sequential)]
    public struct BITMAPINFOHEADER
    {
        /// DWORD->unsigned int
        public uint biSize;    /// LONG->int
        public int biWidth;    /// LONG->int
        public int biHeight;    /// WORD->unsigned short
        public ushort biPlanes;    /// WORD->unsigned short
        public ushort biBitCount;    /// DWORD->unsigned int
        public uint biCompression;    /// DWORD->unsigned int
        public uint biSizeImage;    /// LONG->int
        public int biXPelsPerMeter;    /// LONG->int
        public int biYPelsPerMeter;    /// DWORD->unsigned int
        public uint biClrUsed;    /// DWORD->unsigned int
        public uint biClrImportant;
    }[StructLayoutAttribute(LayoutKind.Sequential)]
    public struct RGBQUAD
    {
        /// BYTE->unsigned char
        public byte rgbBlue;    /// BYTE->unsigned char
        public byte rgbGreen;    /// BYTE->unsigned char
        public byte rgbRed;    /// BYTE->unsigned char
        public byte rgbReserved;
    }public partial class NativeMethods
    {    /// Return Type: BOOL->int
        ///pData: UCHAR**
        ///pInfo: BITMAPINFO**
        [DllImportAttribute("<Unknown>", EntryPoint = "MAG_GetOutputColorBardata")]
        [return: MarshalAsAttribute(UnmanagedType.Bool)]
        public static extern bool MAG_GetOutputColorBardata(ref IntPtr pData, ref IntPtr pInfo);}不是找到P/Invoke Interop Assistant 今晚真成了我的世界末日了。
    结贴