C#要调用一个VB类库,接口如下:Sub SetBitMap(
ByRef ImageInfo As String,
ByRef ImageData As String )
ImageInfo:the DIB data header information: BITMAPINFOHEADER structure.
ImageData:a bit-string of DIB data.在C#中已经通过DirectShow取得Bitmap的地址,
IntPtr bitmapPtr = getBitmapFromDirectShow();
请问接下来怎么调用这个VB库?

解决方案 »

  1.   

    你要转成标准的API函数,net才能进行平台调用,互操作!
    还有,你把VB中使用的部分代码贴出,这样别人更好理解
      

  2.   


    这个vb库的其他函数,都可以调用的,问题的关键是,如何从IntPtr bitmapPtr里面得到SetBitMap需要的两个参数。
      

  3.   

    Sub SetBitMap(ByRef ImageInfo As String,ByRef ImageData As String )
    这个函数里的参数明明是string类型的,直接在C#用string里就可以对应!getBitmapFromDirectShow();这个函数原来在VB里返回值类型是什么?
      

  4.   

    getBitmapFromDirectShow()是C#写的,拿到包含bitmap的一段地址。
      

  5.   

    “getBitmapFromDirectShow()是C#写的”,
    楼主,有个问题:你现在关心的重点应该是如何平台调用、互操作,对吧,比如:进行结构体映射、函数映射等
    而你的函数SetBitMap(ByRef ImageInfo As String,ByRef ImageData As String )根本就是很简单的函数,
    其实你的重点是BITMAPINFOHEADER ,所以,你要告诉别人BITMAPINFOHEADER 是不是一个结构体,还是仅仅是一个句柄而已!不论是句柄,还是结构体,你都要把它在VB中如何使用的贴出来,这样别人才能帮到你,这下明白没有?
      

  6.   

    标题已经说了,C#掉VB的类库。BITMAPINFOHEADER,如果懂Bitmap就懂是什么!
      

  7.   

    把这个类库在VB6中生成dll然后再C#就可以用了
    http://www.taotechinfo.com/collect/2010222/n68565463.html
      

  8.   

    “BITMAPINFOHEADER,如果懂Bitmap就懂是什么!”,跟这个没关系,因为你的重心是互操作,你就需要把VB的这边的信息完整贴出来,就如不怎么懂C/C++的人,一样也可以帮别人进行互操作映射!不过,我在msdn查到了这个结构:
    typedef struct tagBITMAPINFOHEADER { 
      DWORD biSize; 
      LONG biWidth; 
      LONG biHeight; 
      WORD biPlanes; 
      WORD biBitCount 
      DWORD biCompression; 
      DWORD biSizeImage; 
      LONG biXPelsPerMeter; 
      LONG biYPelsPerMeter; 
      DWORD biClrUsed; 
      DWORD biClrImportant; 
    } BITMAPINFOHEADER; 对应的C#结构体:
    [ StructLayout( LayoutKind.Sequential, CharSet=CharSet.Ansi )]
    public struct BITMAPINFOHEADER{
      public uint biSize; 
      public int   biWidth; 
      public int   biHeight; 
      public uint biPlanes; 
      public uint biBitCount 
      public uint biCompression; 
      public uint biSizeImage; 
      public int   biXPelsPerMeter; 
      public int   biYPelsPerMeter; 
      public uint biClrUsed; 
      public uint biClrImportant;