现在,我调用一个函数,然后返回一个IStream * .in c ++ applicaction,我可以使用Cimage.load(IStream *),然后保存它。它成功了。
但在c#中,我无法获得IStream。
并且iBitMapSize也很短。例如,在c ++中它是34257415.在c#it的342中。 大小是..我从第三方库得到一个图像。类的图像是作者自己定义的。当我使用库函数获取图像时,我将大小的图像提供给iBitMapSize,然后将图像提供给IWICStream,然后将IWICStream提供给IStream *。
c ++应用程序代码:
typedef IStream*(*GetRegionTile)(const wchar_t* , int64_t , int64_t , float , int64_t , int64_t, uint64_t&);
GetRegionTile getregiontile = (GetRegionTile)GetProcAddress(hDllInst, "GetRegionTile");
IStream* stream= getregiontile(filepath, x,y, _zoom, w, h, iBitMapSize);
CImage image;
image.Load(stream);
LPCTCH savePath= L"D:/123.png";
image.Save(savePath, Gdiplus::ImageFormatPNG);
c#importdll代码:
[DllImport("SConver.dll", EntryPoint = "GetRegionTile", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Unicode)]
public static extern System.Runtime.InteropServices.ComTypes.IStream GetRegionTile(string fileName, long x, long y, float zoom, long w, long h, out uint iBitMapSize);
c#usedll code:
System.Runtime.InteropServices.ComTypes.IStream stream = Import_DLL.GetRegionTile(file_name, lx, ly, zoom, lw, lh, out iBitMapSize);
byte[] fileBytes = new byte[iBitMapSize];
stream.Read(fileBytes, fileBytes.Length, IntPtr.Zero);
System.IO.MemoryStream ms = new System.IO.MemoryStream(fileBytes);
System.Drawing.Image image = System.Drawing.Image.FromStream(ms);
image.Save(@"D:\123.png");
我是一名c#开发人员,对c ++基础并不是特别熟悉。我可能会问基本问题,但非常感谢你的帮助。