当前位置: 首页 > news >正文

网站建设设计说明书做网站还有前景吗

网站建设设计说明书,做网站还有前景吗,宁波专业网站定制制作服务,淮安网站建设封送类(Marshaling classes)在.NET框架中扮演着至关重要的角色,尤其是在托管代码与非托管代码之间进行数据交换时。封送过程涉及到将托管环境中的对象转换为非托管环境中可以理解的形式,并且反之亦然。这一过程确保了两种不同类型…

封送类(Marshaling classes)在.NET框架中扮演着至关重要的角色,尤其是在托管代码与非托管代码之间进行数据交换时。封送过程涉及到将托管环境中的对象转换为非托管环境中可以理解的形式,并且反之亦然。这一过程确保了两种不同类型的代码能够有效地通信和协作。

以下是封送类、结构和联合

类型描述示例
按值传递类将具有整数成员的类传递为In/Out参数,与托管的情形相似。SysTime 示例
按值传递结构将结构作为In参数传递。结构示例
按引用传递结构将结构作为In/Out参数传递。OSInfo 示例
具有内嵌结构(平展)的结构传递非托管函数中表示内嵌结构的结构的类。此结构再托管的原型中将平展为一个的结构。FindFile 示例
具有指向另一结构的指针的结构将包含指向第二结构的指针的结构作为成员传递。结构示例
按值传递具有整数的结构数组将仅包含整数的结构数组作为In/Out参数进行传递。可以更改数组的成员。数组示例
按引用传递具有整数和字符串的结构数组将包含整数和字符串的结构数组作为Out参数参数。被调用的函数为数组分配内存。OutArrayOfStructs 示例
具有值类型的联合传递具有值类型(整数和双精度)的联合。联合示例
具有混合类型的联合传递具有混合类型(整数和字符串)的联合。联合示例
具有特定平台的布局的结构使用本机打包的传递类型。平台示例
结构中的null值传递空引用(Visual Basic中为Nothing),而不传递对值类型的引用。HandleRef 示例

类的封送

当涉及到类的封送时,需要注意的是,在.NET Framework中,类是引用类型,而结构体是值类型。这意味着类实例通过引用传递,而结构体则是通过复制整个结构体的内容来传递。对于类而言,默认情况下它们只能通过COM互操作来进行封送,并总是作为接口被封送。

对于类而言,默认情况下它们只能通过COM互操作来进行封送,并总是作为接口被封送。具体来说:

  • 向COM传递类:当托管类传递给COM时,互操作封送处理程序会自动使用COM代理包装该类,并将由代理生成的类接口传递到COM方法调用。代理负责委托对类接口的所有调用返回给托管对象,并公开其他不由类显式实现的接口,如IUnknownIDispatch

  • 向.NET代码传递类:当接口传递回托管代码时,互操作封送处理程序负责用适当的包装器包装接口,并将这个包装器传递给托管方法。每个COM对象实例都有一个唯一的包装器,无论该对象实现了多少个接口。例如,如果一个COM对象实现了五个不同的接口,则只有一个包装器实例存在,它公开所有这五个接口。

封送类的默认行为

对于某些特定的.NET类型,如数组、布尔值、字符、委托、类、对象、字符串和结构等,默认的封送规则已经定义好了。这些规则决定了数据如何在托管和非托管内存之间传递。例如,.NET数组通常会被封送成指向数组元素本机表示形式的指针;而对于字符串,默认情况下会根据上下文选择合适的编码方式(如UTF-16, ANSI, UTF-8等),并且可以通过设置MarshalAs属性来指定更具体的封送选项。

自定义封送

尽管有默认的封送规则,但在很多实际应用场景下,开发者可能需要更加精细地控制封送过程。这时就可以利用MarshalAsAttribute属性来指定参数或字段应该怎样被封送。例如,如果你想要将字符串作为以null结尾的UTF-8字符串发送,你可以这样做:

[LibraryImport("somenativelibrary.dll")]
static extern int MethodA([MarshalAs(UnmanagedType.LPStr)] string parameter);
//或者
[LibraryImport("somenativelibrary.dll", StringMarshalling = StringMarshalling.Utf8)]
static extern int MethodB(string parameter);

示例:封送具有嵌套结构的类

假设我们有一个C++ DLL导出了一个名为MYPERSON3的结构体,其中包含了另一个结构体MYPERSON以及一个整数成员age。要在C#中正确地封送这样的结构体,我们可以定义相应的托管结构如下:

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct MyPerson
{public string first;public string last;
}[StructLayout(LayoutKind.Sequential)]
public struct MyPerson3
{public MyPerson person;public int age;
}

接着,我们需要为非托管函数创建一个托管原型,并确保正确地处理结构体的封送。如果我们知道函数接受的是按值传递的MYPERSON3结构体,那么我们的C#声明可能会像这样:

private static class NativeMethods
{[DllImport("..\\LIB\\PinvokeLib.dll")]public static extern void TestStructInStruct3(MyPerson3 person3);
}

在这个例子中,MyPerson3结构体会作为一个整体被复制到非托管堆栈上,然后传递给非托管函数。如果函数修改了结构体的内容,那么这些更改不会反映回原始的托管副本,除非我们将参数标记为refout,从而允许双向的数据流动。

总结:

封送类涉及到了解托管与非托管边界上的数据传输机制,包括但不限于上述提到的各种细节。正确地配置和管理这些细节可以帮助避免潜在的问题,确保应用程序之间的互操作性顺畅无误。

http://www.yayakq.cn/news/757436/

相关文章:

  • 东营网站制作做旅行社的都是在哪网站拿票
  • 做那类网站赚钱阳春网站制作
  • 秦皇岛网站推广联系电话做企业网站需要提供什么资料
  • 重庆城乡建设网站杭州百度开户
  • 网站seo平台大连企业网站建设定制
  • 阳泉网站建设郑州公司建网站
  • 本地搭建多个网站网页设计与制作教程第六版第六章源代码
  • 重庆渝能建设集团有限公司网站游戏官网做的好的网站
  • 怎么做网站访问被拒绝推广普通话的宣传标语
  • 中小企业网站建设应该注意什么事项wordpress $数组
  • 上海网站 备案查询苏州网站建站
  • 网页游戏网站在线玩常熟网站建设公司
  • 彩票网站模板源码翻译网站建设
  • 网站大全正能量免费2020公司公众号怎么制作
  • 可以做企业网站深圳网站建设q双赢世讯
  • 云南网站做的好的公司哪家好颜色广告
  • 如何用子域名做网站网片加工厂家
  • 提高网站知名度深圳房产 网站建设
  • 做任务赚话费的网站wordpress 默认图片路径
  • 网站开发有哪些课程做网站需要多钱
  • 麟游做网站个人接广告的平台
  • 流媒体视频网站建设wordpress评论框表情
  • 网站页面footer的copy域名cn和com有什么区别
  • 艺术品拍卖网站源码php虹口建设机械网站
  • 酒店预订网站模板西安网站建设排名
  • 江门网站制作 华企立方电动汽车排名前十名
  • 网站开发与app差距电子商务网站建设论文总结
  • 厦门物流网站建设滨江建设工程网站
  • 嘉兴电子商务网站建设企业建设网站需注意哪些事项
  • 网站建设php教程视频湖南地税局官网站水利建设基金