2013-05-01 5 views
0

У меня есть Dll и файл заголовка для него, и я пытаюсь создать COM-оболочку на C++ для использования в C#.
Для большинства функций это было очень просто, так как они возвращались int или string.HBITMAP * Bitmap to .net Bitmap

У меня есть эта структура в файле заголовка.

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

Моя проблема заключается в том, что, так как я выход из моей лиги с C++ я не знаю, как преобразовать HBITMAP к чему-то более присвоенной стиль .net

Спасибо заранее, и, пожалуйста, простите меня, если писал глупостей

UPDATE: Я пытался что-то вроде этого:

HBITMAP GetBMP(int Width, int Height) 
{ 

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

} 

проблема, очевидно, после того, как т hat in C# как преобразовать из «HBITMAP __ *» в «System.IntPtr», чтобы использовать его с bitmap.fromHbitmap

+0

Объявление '[DllImport]' C# для 'GetBMP' - это место, где вы объявляете третий параметр как' out IntPtr'. – GSerg

+0

no im не импортировать dll в C# im, пытающийся написать C++ wrapper –

+0

Тогда вы путаете всех нас. «Управляемая оболочка» - это то, что вы пишете на C#. Если вы пишете C++-оболочку, это может быть оболочка COM. Я отредактировал ваш вопрос, чтобы отразить это. Не стесняйтесь вносить изменения в редактирование. (Возможно, вы * используете * управляемый C++?) – GSerg

ответ

1

Параметр должен быть out IntPtr.

Затем вы можете создать дополнительную функцию, которая вызовет GetBMP, а затем вызовет Bitmap.FromHbitmap, чтобы вернуть растровое изображение. Такая функция должна затем DeleteObject оригинал hbitmap.

0

Возможно, вам стоит попробовать System.IntPtr.