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

 更新时间:2010年04月15日 00:09:58   作者:  
最近使用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中ListView(列表视图)的使用前台绑定附源码

    ASP.NET中ListView(列表视图)的使用前台绑定附源码

    ListView(列表视图)想必大家都知道吧,接下来本文将介绍下ListView的使用前台绑定,感兴趣的你可不要错过本文了哈
    2013-03-03
  • 详解.NET主流的几款重量级 ORM框架

    详解.NET主流的几款重量级 ORM框架

    这篇文章主要介绍了.NET主流的几款重量级 ORM框架,市场上轻量级ORM有很多,比如Dapper、Chloe 本篇文章就介绍一下 功能比较多并且全的ORM,需要的朋友可以参考下
    2022-07-07
  • asp.net内置对象 Response对象使用介绍

    asp.net内置对象 Response对象使用介绍

    这篇文章主要介绍了asp.net内置对象:Response对象使用介绍,对Response对象感兴趣的小伙伴们可以参考一下
    2015-11-11
  • .NET学习笔记之默认依赖注入

    .NET学习笔记之默认依赖注入

    这篇文章主要给大家介绍了关于.NET学习笔记之默认依赖注入的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • asp.net core2.2多用户验证与授权示例详解

    asp.net core2.2多用户验证与授权示例详解

    这篇文章主要给大家介绍了关于asp.net core2.2多用户验证与授权的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-01-01
  • VS2013设置护眼背景颜色

    VS2013设置护眼背景颜色

    我们做开发的一做基本都是一天,对着屏幕眼镜肯定会累,下面教大家一个VS2013设置护眼背景色的方法。
    2016-04-04
  • C# Base64编码

    C# Base64编码

    Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码。它将需要编码的数据拆分成字节数组。
    2009-06-06
  • 使用EF Code First搭建简易ASP.NET MVC网站并允许数据库迁移

    使用EF Code First搭建简易ASP.NET MVC网站并允许数据库迁移

    这篇文章介绍了使用EF Code First搭建简易ASP.NET MVC网站并允许数据库迁移的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09
  • ASP.NET WebAPI连接数据库的方法

    ASP.NET WebAPI连接数据库的方法

    这篇文章主要为大家详细介绍了ASP.NET WebAPI连接数据库的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • ASP.NET技巧:教你制做Web实时进度条

    ASP.NET技巧:教你制做Web实时进度条

    ASP.NET技巧:教你制做Web实时进度条...
    2006-09-09

最新评论