2013-05-01 66 views
0

我有一个Dll和它的头文件,并且我试图在C++中使用C++创建一个COM包装器。
对于大多数功能来说,这是非常简单的,因为他们返回intstringHBITMAP *位图到.net位图

我在头文件中有这个结构。

virtual HRESULT STDMETHODCALLTYPE GetBMP( 
      int Width, 
      int Height, 
      HBITMAP *Bitmap) = 0; 

我的问题是,由于我的出路我联赛C++的,我不知道如何将HBITMAP转化为更多的东西拨付给.NET风格

在此先感谢,并请原谅我,如果写了愚蠢的事情

更新: 我想是这样的:

HBITMAP GetBMP(int Width, int Height) 
{ 

    HBITMAP bm = 0; 
    m_piHelper->GetBMP(Width,Height,&bm); 
    return bm ; 

} 

问题显然为t之后在C#中如何从'HBITMAP __ *'转换为'System.IntPtr使用它与位图.fromHbitmap

+0

'GetBMP'的'[DllImport]'C#声明是你声明第三个参数为'out IntPtr'的地方。 – GSerg 2013-05-01 22:31:04

+0

没有即时通讯不进口DLL在C#即时通讯尝试写入C++包装 – 2013-05-02 06:15:52

+0

然后,你困惑了我们所有人。 “托管包装器”是你用C#编写的东西。如果你正在编写一个C++包装器,那可能是一个COM包装器。我编辑了你的问题来反映这一点。请随意修改相应的编辑。 (也许你*使用托管C++?) – GSerg 2013-05-02 08:03:27

回答

1

参数应该是out IntPtr

然后,您可以创建一个附加功能,该功能将呼叫GetBMP,然后呼叫Bitmap.FromHbitmap返回位图。这样的功能必须DeleteObjecthbitmap

0

你应该尝试System.IntPtr。