首页 > 编程知识 正文

c代表什么,北京奔驰c200

时间:2023-05-03 06:18:46 阅读:36429 作者:4635

一、IntPtr是什么

首先,让我们看看:在MSDN中用于表示指针或句柄的特定于平台的类型。 这表明了两个事实: IntPtr是平台特定的类型,可用于表示指针和句柄。 那个说明最好由这位兄弟写。 it’saclassthatwrapsapointerthatisusedwhencallingwindowsapifunctions.theunderlyingpointermaybe 32 bitor 64位从属设计工具heplaybe 根据平台的不同,低位指针可以是32位,也可以是64位)。

2 )在哪里使用

(1) C#调用WIN32 API

)2) c )调用用C/C编写的DLL (其实与1相同,但这一般是我们与他人合作开发时常用的) )。

3 )如何使用

例如,有被定义为dll demo _ API int _ _ stdcall inptr _ test (long param 1,HWND hWnd )的函数的原型。 那么,用C#引用的时候这样写:

[dllimport(dllplayer.dll ),entrypoint=) IP _ TPS _ open stream ] publicstaticexternintinptr _ test ] int param调用这里提到了C#型和c型的对应关系。 网上有很多这样的东西,这里省略说明,列举一些常用的和经常被误解的东西。

)一般可以像char*、void*那样直接支持IntPtr。 例如,在C#中,经常使用转换为IntPtr并传递给char*、void*等的字符串类型。 转换方法为string txt='test '; marshal.stringtocotaskmemauto (txt; 在这里,您可能会使用StringToCoTaskMemAnsi,但是StringToCoTaskMemAuto可以自动分配内存。 这将txt的内容复制到未托管的内存块中。

)2)对于结构体,例如有结构体StructText,将其转换为Intptr,不直接使用Marshal.StructureToPtr,很容易出错。 可以这样使用:

intsize=marshal.sizeof (结构文本); //获取结构占用空间intptr intptr=marshal.all och全局(size ); //声明大小相同的空间marshal.structuretoptr (struct text,intptr,true )//将结构放在此空间中//ch:保存图像| en : saveimageprivive mycamera.mv _ frame _ out _ info _ exs tfo int nindex (if ) (3*stframeinfo.nframelen2048 ) m_nBufSizeForSaveImage stframeinnage m _ pbufforsaveimage=marshal.all och global ((int 32 ) m_nBufSizeForSaveImage ); } mycamera.mv _ save _ image _ param _ exstsaveparam=newmycamera.mv _ save _ image _ param _ ex (; tsaveparam.en imagetype=mycamera.mv _ save _ iamge _ type.mv _ image _ BMP; stsaveparam.enpixeltype=stframeinfo.enpixeltype; stSaveParam.pData=pData; tsaveparam.n datalen=stframeinfo.nframelen; stsaveparam.nheight=stframeinfo.nheight; tsaveparam.nwidth=stframeinfo.nwidth; tsaveparam.pimage buffer=m _ pbufforsaveimage; stsaveparam.nbuffersize=m _ nbufsizeforsaveimage; //stSaveParam.nJpgQuality=80; 保存Jpeg时有效的int nret=m _ pm ycamera [ nindex ].mv _ cc _ save image ex _ net (refstsaveparam ); if(mycamera.mv_ok!=nret((stringtemp='no.' ) nindex1).ToString ) ) '设备保存故障!' ; showerror msg (时间,0 ); } else { string [ ] path={ ' image1.BMP ',' image2.bmp ',' image3.bmp ',' image4.bmp' }; byte [ ] barrbufforsaveimage=new byte [ stsaveparam.nimage len ]; marshal.copy (m _ pbufforsaveimage,bArrBufForSaveImage,0,(Int32 ) stSaveParam.nImageLen ); marshal.release (m _ pbufforsaveimage; filestream file=new filestream (path [ nindex ],FileMode.Create,FileAccess.Write ); file.write(barrbufforsaveimage,0,(int ) stSaveParam.nImageLen ); file.Close (; stringtemp='no.'(nindex1).ToString ) '设备保存成功!' ; showerror msg (时间,0 ); }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。