0
我目前在托管C++代码中有一个System::Drawing::Bitmaps
数组。我希望能够从非托管(本地)C++调用托管C++中的方法。问题是如何将数组传回非托管C++?如何将托管C++位图阵列传递给非托管C++
我可以在托管的C++位图上调用GetHbitmap()
,它返回IntPtr
。我应该传递一组IntPtrs吗?不太确定最好的方法来做到这一点。所以要清楚,我有这样的:
托管C++方法:
void GetBitmaps(<????>* bitmaps)
{
//Calling into C# to get the bitmaps
array<System::Drawing::Bitmap^>^ bmp=ct->DataGetBitmaps(gcnew String(SessionID));
for(int i=0;i<bmp.Length;i++)
{
System::Drawing::Bitmap^ bm=(System::Drawing::Bitmap^)bmp.GetValue(i);
IntPtr hBmp=bm->GetHbitmap();
}
//So now how to I convert the hBmp to an array value that I can then pass back to unmanaged C++(hence the <????> question for the type)
}
是HBITMAPS的阵列?如果是这样,你怎么能将IntPtr
hBmp转换为该阵列?
托管的C++代码工作得很好,并且正确地获取位图数组。但是现在当非托管C++调用GetBitmaps方法时,我需要将这些位图返回到非托管C++。我不知道应该传入哪种类型的变量,然后一旦将它传入,我该如何将它转换为非托管C++可以使用的类型?
就代码托管C++中的托管位图转换为HBITMAP而言,此代码非常有用。进一步的问题:我实际上是从外部非托管C++代码调用此方法。所以当我从非托管C++传入HBITMAP数组时,我将它作为“HBITMAP *位图”传入。 – user1059993 2013-02-25 02:22:41
然后在托管的C++ I中分配位图=新的HBITMAP [托管位图的数量]。然后我按照上面的指示分配每个元素。这一切工作正常,除非当我回到托管C++方法时:位图数组突然变为空,返回到非托管代码。我假设也许我必须在托管C++中分配不同的HBITMAP数组? – user1059993 2013-02-25 02:25:09