`
king_c
  • 浏览: 215352 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MarshalAs

    博客分类:
  • c#
 
阅读更多

 MarshalAs是提供向非托管代码封送数据时的规则。比如String或StringBuilder型,传递给非托管代码的时候可能是LPStr LPWStr BStr等等。你通过MarshalAs特性告诉.NET应该封送成什么类型。


Marshal就是把一个结构(类)序列化成一段内存,然后送到另一个进程(.net中Application domain)中供另一个进程中的函数使用。   
  比如你的一个结构struct{   
  Pen pen;   
  }s; s是一个指向已有的Pen对象的引用,当你把s传给本进程中的一个函数f时,f可以很容易地找到pen的实际对象,但如果你把s传到另外一个进程时,甚至是另外一台机器上的进程时,这个进程就没办法找到pen的实际内容。Marshal技术则可以把pen对象中的所有实际内容按规则放到一个缓冲中,(所有的引用或指针都要转换成实际对象)然后把缓冲中的内容送到另一个进程,函数调用完成再用同样方式把结果返回来。   
  在RPC,Interop,COM中Marshal应用很多。

分享到:
评论

相关推荐

    C#语言参考C#语言参考

    19.14 MarshalAs 属性 263 19.15 NoIDispatch 属性 264 19.16 NonSerialized 属性 264 19.17 Predeclared 属性 264 19.18 PreserveSig 属性 264 19.19 Serializable 属性 265 19.20 StructLayout 属性 265 19.21 ...

    c#GetVideo

    public static extern bool capGetDriverDescriptionA(short wDriver, [MarshalAs(UnmanagedType.VBByRefStr)] ref string lpszName, int cbName, [MarshalAs(UnmanagedType.VBByRefStr)] ref string lpszVer, int ...

    C# 优雅的 APIHOOK 支持X86+X64源码

    public delegate Int32 MessageBoxW(IntPtr hWnd, [MarshalAs(UnmanagedType.LPWStr)] string lpText, [MarshalAs(UnmanagedType.LPWStr)] string lpCaption, UInt32 uType); public class MessageBoxHook : ...

    c# 屏幕旋转控制

    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string dmDeviceName; public short dmSpecVersion; public short dmDriverVersion; public short dmSize; public short dmDriverExtra; ...

    C#版ActiveX + JS +Flex通讯 完整实现

    int GetInterfaceSafetyOptions( ref Guid riid, [MarshalAs(UnmanagedType.U4)] ref int pdwSupportedOptions, [MarshalAs(UnmanagedType.U4)] ref int pdwEnabledOptions); [PreserveSig()] int ...

    c# 用共享内存实现进程通信

    c# 用共享内存实现进程通信 开几个程序都可以访问同样的内存数据 ... public static extern IntPtr OpenFileMapping(int dwDesiredAccess, [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, string lpName);

    用c#写的录音程序源码

    [return: MarshalAs(UnmanagedType.Bool)] public static extern bool mciGetErrorString( uint mcierr, [MarshalAs(UnmanagedType.LPStr)] System.Text.StringBuilder pszText, uint cchText); } }

    【VS2010 C# 代码】获取鼠标所在位置的窗口句柄名称和文字及位置

    [return: MarshalAs(UnmanagedType.Bool)] public static extern bool GetWindowRect(IntPtr hWnd, ref RECT lpRect); [StructLayout(LayoutKind.Sequential)] public struct RECT { public int Left; //最左坐标 ...

    vlc-2.1.3 带录像功能的封装库

    // [MarshalAs(UnmanagedType.LPStr)] string path [DllImport("libvlc", CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr libvlc_media_new_path(IntPtr libvlc_instance, IntPtr ...

    vlc-2.2.6 带录像功能的封装库.zip

    // [MarshalAs(UnmanagedType.LPStr)] string path [DllImport("libvlc", CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr libvlc_media_new_path(IntPtr libvlc_instance, IntPtr ...

    微软 C#语言参考 CHM格式

    目录 1. 介绍... 1 1.1 Hello, world. 1 1.2 类型 2 1.2.1 预定义类型......1.2.2 转换......1.2.3 数组类型......1.2.4 类型系统一致......1.3 变量和参数......19.14 MarshalAs 属性... 263 19.15 NoIDispatch 属性.....

    C#语言参考,微软的基础教程

    19.14 MarshalAs 属性 79 19.15 NoIDispatch 属性 79 19.16 NonSerialized 属性 79 19.17 Predeclared 属性 79 19.18 PreserveSig 属性 79 19.19 Serializable 属性 79 19.20 StructLayout 属性 79 19.21 ...

    海康视频卡动态库

    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] byte[] sn; /// /// 板卡包含的DSP个数 /// uint dspCount; /// /// 板卡上第一个DSP的索引 /// uint firstDspIndex; /// /// 板卡包含的...

    C#语言参考

    C#语言参考 目录 <br>1. 介绍..........................................................................................................................................................

    用C#写的ADSL拨号程序的代码示例

    <!–StartFragment–>ADSL自动拨号类,前提是在系统中已经有了一个宽带拨号连接 调用代码: RASDisplay ras = new RASDisplay(); ras.Disconnect();//断线 ras.Connect(“adsl”);... [MarshalAs(Unmanaged

    C#调用C++DLL注意事项

    C#调用C++DLL注意事项:C#调用C++DLL注意事项: 1>C#值类型与引用类型的内存特点 ...2>平台调用中DllImport,StructLayout,MarshalAS的各属性及其含义 3>C++中结构体的内存布局规则 。。。。。。

    DotNetVmtHook:从.NET挂钩本机应用程序的VMT

    点网虚拟机挂钩 允许您从.NET Framework和.NET Core挂钩本机应用程序的VMT。 表现似乎不错; 但是我还没有运行任何基准测试,因此自然地进行钩挂会更快。 注意:这使用影子VMT,... [ return : MarshalAs ( Unmana

    TPSLRawDataSimulator

    接受字段的MarshalAs属性,您可以: 数组字段的UnmanagedType.ByValArray和ArraySubType在序列化时将获得转录或填充。 现在支持类型I1,U1,I2,U2,I4,U4,I8,U8,R4,R8 。 UnmanagedType为基本值字段,在序列化时将...

    C# 实现ADSL自动断网和拨号的方法(适用于拨号用户)

    封装类: using System;... [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 257)] public string szEntryName; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 17)] public string szDeviceType;

Global site tag (gtag.js) - Google Analytics