服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

C#调用C++版本dll时的类型转换需要注意的问题小结

2019-09-02 09:47asp.net之家 ASP.NET教程

最近使用C#调用C++版本的dll遇到很多类型转换的问题,现记录出容易出错的部分。

C#对于C++的dll引用时,经常会遇到类型转换和struct的转换

1. C++ 里的Char类型是1 个字节,c#里的Char是两个字节,不可以对应使用;可使用c#里的byte对应

2. structType temp = (structType)Marshal.PtrToStructure(IntPtr, typeof(structType));说明:此方式转换只针对包含c++基本类型的结构体,如果包含指针数组的结构体,使用泛型函数比较方便。

3. [StructLayoutAttribute(LayoutKind.Sequential)] 说明:StructLayoutAttribute 类 使 用户可以控制类或结构的数据字段的物理布局;LayoutKind控制当导出到非托管代码时对象的布局。

4. [MarshalAsAttribute(UnmanagedType.LPWStr)] 指示如何在托管代码和非托管代码之间封送数据;说明:UnmanagedType指定如何将参数或字段封送到非托管代码。

托管代码 (managed code)

由公共语言运行库环境(而不是直接由操作系统)执行的代码。托管代码应用程序可以获得公共语言运行库服务,例如自动垃圾回收、运行库类型检查和安全支持等。这些服务帮助提供独立于平台和语言的、统一的托管代码应用程序行为。

托管代码是可以使用20多种支持Microsoft .NET Framework的高级语言编写的代码,它们包括:C#, J#, Microsoft Visual Basic .NET, Microsoft JScript .NET, 以及C++。所有的语言共享统一的类库集合,并能被编码成为中间语言(IL)。运行库编译器(runtime-aware compiler)在托管执行环境下编译中间语言(IL)使之成为本地可执行的代码,并使用数组边界和索引检查,异常处理,垃圾回收等手段确保类型的安全。

在托管执行环境中使用托管代码及其编译,可以避免许多典型的导致安全黑洞和不稳定程序的编程错误。同样,许多不可靠的设计也自动的被增强了安全性,例如 类型安全检查,内存管理和释放无效对象。程序员可以花更多的精力关注程序的应用逻辑设计并可以减少代码的编写量。这就意味着更短的开发时间和更健壮的程序。

非托管代码 (unmanaged code)

在公共语言运行库环境的外部,由操作系统直接执行的代码。非托管代码必须提供自己的垃圾回收、类型检查、安全支持等服务;它与托管代码不同,后者从公共语言运行库中获得这些服务。

延伸 · 阅读

精彩推荐
  • ASP.NET教程asp.net 导出到CSV文件乱码的问题

    asp.net 导出到CSV文件乱码的问题

    导出到CSV文件乱码的问题,需要的朋友可以参考下。...

    服务器之家4882019-08-31
  • ASP.NET教程asp.net Linq to Xml学习笔记

    asp.net Linq to Xml学习笔记

    之前都没有学习过关于XML文件的操作,由于最近开发的项目需要用到,开始时学习了原始的XML文件操作方法,看了半天,也看的头晕眼花,没学习到真正的用法,后来在同事的推荐下学习了Linq to Xml...

    ASP.NET之家3832019-07-22
  • ASP.NET教程Silverlight中动态获取Web Service地址

    Silverlight中动态获取Web Service地址

    在使用WCF或者WS进行数据库操作的时候都需要有一个明确的服务地址,如果是WCF就是svc文件地址。初学者通常会直接使用VS的Add Service Reference来添加引用。这的确是十分方便的手段,但是这样会带来什么样的麻烦呢? 第一,在开发...

    ASP.NET之家1382019-06-21
  • ASP.NET教程.net core中Quartz的使用方法

    .net core中Quartz的使用方法

    这篇文章主要介绍了.net core中Quartz的使用方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    ♀影☆响3182019-06-19
  • ASP.NET教程asp.net 无刷新翻页就是这么简单

    asp.net 无刷新翻页就是这么简单

    前两天看了一个自定义分页控件,和AspNetPager一样是实现IPostBackEventHandler接口,不过简洁许多,就想能不能实现ICallbackEventHandler接口做到无刷新分页呢?想到了就马上去做,终于,设想变成了现实!!...

    ASP.NET之家1932019-07-16
  • ASP.NET教程ASP.NET 页面间数据传递方法小结

    ASP.NET 页面间数据传递方法小结

    Web 页面是无状态的, 服务器对每一次请求都认为来自不同用户,因此,变量的状态在连续对同一页面的多次请求之间或在页面跳转时不会被保留。...

    ASP.NET之家4012019-06-27
  • ASP.NET教程ASP.NET操作Excel备忘录

    ASP.NET操作Excel备忘录

    ASP.NET下操作Excel的一些技巧分析,需要的朋友可以参考下。...

    ASP.NET之家1972019-07-03
  • ASP.NET教程asp.net url分页类代码

    asp.net url分页类代码

    asp.net url分页类代码,需要用到分页的朋友可以参考下。...

    服务器之家1312019-06-22