C++ cli 从HBITMAP创建位图(.NET)

C++ cli 从HBITMAP创建位图(.NET),c++-cli,type-conversion,intptr,hbitmap,C++ Cli,Type Conversion,Intptr,Hbitmap,我正在使用C++/CLI,我有一个名为hStrip的原始HBITMAP,我必须在PictureBox中显示它,因此我找到了以下函数System::Drawing::Image::FromHbitmap,然而,这需要IntPtr,我想知道在传入之前是否需要将原始HBITMAP转换为IntPtr,或者是否可以像这样传入 如果我需要转换,我应该如何转换?我还没有找到这种转换方式。不过我确实是用另一种方式找到的。一个简单的演员阵容就能完成任务: HBITMAP hBmp = NULL; // Assig

我正在使用C++/CLI,我有一个名为
hStrip
的原始
HBITMAP
,我必须在
PictureBox
中显示它,因此我找到了以下函数
System::Drawing::Image::FromHbitmap
,然而,这需要
IntPtr
,我想知道在传入之前是否需要将原始
HBITMAP
转换为
IntPtr
,或者是否可以像这样传入


如果我需要转换,我应该如何转换?我还没有找到这种转换方式。不过我确实是用另一种方式找到的。

一个简单的演员阵容就能完成任务:

HBITMAP hBmp = NULL;
// Assign hBmp
//...
Bitmap^ bmp = Bitmap::FromHbitmap((IntPtr)hBmp);
DeleteObject(hBmp);  // okay to destroy now

一个简单的演员阵容就能完成任务:

HBITMAP hBmp = NULL;
// Assign hBmp
//...
Bitmap^ bmp = Bitmap::FromHbitmap((IntPtr)hBmp);
DeleteObject(hBmp);  // okay to destroy now

你试过了吗?在这些情况下它失败了吗?@Attila不,我没有尝试过,因为我的应用程序太复杂了,不能简单地在atm上尝试。由于它们本质上是不同的类型,我只是假设不兼容,但可能我的假设是错误的HBitmap是一个句柄,实际上是一个IntPtr。正如Mare所说,
IntPtr
的原因是表示任意的低级指针(而不是.NET句柄和引用)。NET API没有为每个可能的指针组合创建类型(无论如何这是不可能的),而是使用
IntPtr
类型来表示任意指针(通常是句柄)。不同类型的句柄只是大小大致相同的位模式。或始终小于指针的大小(intptr是一种足以表示指针值位的整数类型)。所以,如果有必要的话,只需重新解释一下演员阵容。你试过了吗?在这些情况下它失败了吗?@Attila不,我没有尝试过,因为我的应用程序太复杂了,不能简单地在atm上尝试。由于它们本质上是不同的类型,我只是假设不兼容,但可能我的假设是错误的HBitmap是一个句柄,实际上是一个IntPtr。正如Mare所说,
IntPtr
的原因是表示任意的低级指针(而不是.NET句柄和引用)。NET API没有为每个可能的指针组合创建类型(无论如何这是不可能的),而是使用
IntPtr
类型来表示任意指针(通常是句柄)。不同类型的句柄只是大小大致相同的位模式。或始终小于指针的大小(intptr是一种足以表示指针值位的整数类型)。因此,如果有必要,只需重新解释一下。