2013-05-01 73 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。