C#调用C++ memcpy实现各种参数类型的内存拷贝

using System;
using System.Runtime.InteropServices;
using System.IO;
namespace tx
{
    struct ST
    {
       public char c1;
       public int x;
       public int y;
    }
    class Ct
    {
        [DllImport("msvcrt.dll", EntryPoint = "memcpy", CallingConvention = CallingConvention.Cdecl, SetLastError = false)]
        public static extern void MemCopy(byte[] dest, byte[] src, int count);//字节数组到字节数组的拷贝

        [DllImport("msvcrt.dll", EntryPoint = "memcpy", CallingConvention = CallingConvention.Cdecl, SetLastError = false)]
        public static extern void MemCopy(int[] dest, byte[] src, int count);//字节数组到整形数组的拷贝

        [DllImport("msvcrt.dll", EntryPoint = "memcpy", CallingConvention = CallingConvention.Cdecl, SetLastError = false)]
        public unsafe static extern void MemCopy(ref ST dest, byte[] src, int count);//注意只有结构体能这么做,class不可以

        static void Main(string[] args)
        {
            //测试----------------------------------------------
            var ms = new MemoryStream();
            BinaryWriter writer = new BinaryWriter(ms);
            writer.Write((byte)‘a‘);
            writer.Write((byte)‘b‘);
            writer.Write((byte)‘c‘);
            writer.Write((byte)‘d‘);
            writer.Write((Int32)10);
            writer.Write((Int32)30);
            var len = ms.Length;
            int[] bs = new int[len/4];
            byte[] bss = new byte[len];

            byte[] buf = ms.GetBuffer();
            var ot = new ST();
            MemCopy(bs, buf, (int)len);
            MemCopy(bss, buf, (int)len);
            MemCopy(ref ot, buf, (int)len);//注意只有结构体能这么做,class不可以
        }

    }

}
时间: 2024-10-23 17:57:06

C#调用C++ memcpy实现各种参数类型的内存拷贝的相关文章

问题:C# params类型参数;结果:C#的参数类型:params、out和ref

C#的参数类型:params.out和ref PS:由于水平有限,难免会有错误和遗漏,欢迎各位看官批评和指正,谢谢~ 首先回顾一下C#声明一个方法的语法和各项元素,[]代表可选 [访问修饰符] 返回值 方法名([参数类型] 数据类型 参数名) {方法体} 这篇文章主要是为了讲解 参数表里面的可选项[参数类型],这个参数类型的设置会影响到我们对参数施加操作后的结果或影响我们对方法的调用方式. C#之中参数类型分为4种: 无:默认的,普通参数 params:不定长参数 out:输出变量 ref:引用

python限定方法参数类型、返回值类型、变量类型等

typing模块的作用 自python3.5开始,PEP484为python引入了类型注解(type hints) 类型检查,防止运行时出现参数和返回值类型.变量类型不符合. 作为开发文档附加说明,方便使用者调用时传入和返回参数类型. 该模块加入后并不会影响程序的运行,不会报正式的错误,只有提醒pycharm目前支持typing检查,参数类型错误会黄色提示 常用类型 int,long,float: 整型,长整形,浮点型 bool,str: 布尔型,字符串类型 List, Tuple, Dict,

Java代码调用Shell脚本并传入参数实现DB2数据库表导出到文件

本文通过Java代码调用Shell脚本并传入参数实现DB2数据库表导出到文件,代码如下: import java.io.File; import java.io.IOException; import java.io.InputStreamReader; import java.io.LineNumberReader; import java.util.HashMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import

python的参数类型

转:http://blog.useasp.net/archive/2014/06/23/the-python-function-or-method-parameter-types.aspx Python中函数的参数有4种形式,分别是: 位置或关键字参数(Positional-or-keyword parameter) 仅位置的参数(Positional-only parameter) 任意数量的位置参数(var-positional parameter) 任意数量的关键字参数(var-keywo

VBA自定义函数参数类型不符的错误

作者:iamlaosong 1.问题提出 编程中发现一个问题,系统总是提示编译错误,ByRef 参数类型不符, 可实际上参数定义没问题,原因在哪儿呢? 2.问题环境 假定函数定义如下: Function get_kind(addr As String) As Integer ...... End Function 调用过程: Sub check_address() Dim addr, new_addr(10000) As String ...... addr = new_addr(i) ....

Swift学习笔记(二)参数类型

关于参数类型,在以前的编程过程中,很多时间都忽视了形参与实参的区别.通过这两天的学习,算是捡回了漏掉的知识. 在swift中,参数有形参和实参之分,形参即只能在函数内部调用的参数,默认是不能修改的,如果想要修改就需要在参数前添加var声明. 但这样的声明过后,仍旧不会改变实参的值,这样就要用到inout了,传递给inout的参数类型必须是var类型的,不能是let类型或者字面类型,(字面类型是在swift中常提的一个术语,个人认为就是赋值语句,也不能修改)而且在传递过程中,要用传值符号"&

基类中定义的虚函数在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型及参数的先后顺序,都必须与基类中的原型完全相同 but------> 可以返回派生类对象的引用或指针

您查询的关键词是:c++primer习题15.25 以下是该网页在北京时间 2016年07月15日 02:57:08 的快照: 如果打开速度慢,可以尝试快速版:如果想更新或删除快照,可以投诉快照. 百度和网页 http://bbs.csdn.net/topics/380238133 的作者无关,不对其内容负责.百度快照谨为网络故障时之索引,不代表被搜索网站的即时页面. 首页 精选版块 移动开发 iOS Android Qt WP 云计算 IaaS Pass/SaaS 分布式计算/Hadoop J

override(重写,覆盖) 1、方法名、参数、返回值相同。 2、子类方法不能缩小父类方法的访问权限。 3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。 4、存在于父类和子类之间。 5、方法被定义为final不能被重写。 overload(重载,过载) 1、参数类型、个数、顺序至少有一个不相同。 2、不能重载只有返回值不同的方法名。 3、存在于父类和子

override(重写,覆盖) 1.方法名.参数.返回值相同. 2.子类方法不能缩小父类方法的访问权限. 3.子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常). 4.存在于父类和子类之间. 5.方法被定义为final不能被重写. overload(重载,过载) 1.参数类型.个数.顺序至少有一个不相同.   2.不能重载只有返回值不同的方法名. 3.存在于父类和子类.同类中. 方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现. 重写(O

JavaScript函数命名空间、参数类型重载实现

有时候使用doFunc({arg1: xxx, arg2:xxx});不方便,还是得在参数表重载,而重载情况又多种多样弄得晕头转向,结果就试着写了这么个东西,也不知道有没有地方能用上: <!DOCTYPE html> <html lang="zh"> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />