打开SerializableAttribute利用里面的函数进行编辑。

 // sparse.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <conio.h>
#using <system.dll>
#using <system.messaging.dll>
#using <System.Runtime.Serialization.Formatters.Soap.dll>//这个里面包含二进制流序列化 using namespace System;
using namespace System::IO;
using namespace System::Runtime::Serialization::Formatters::Binary;
// A test object that needs to be serialized. [Serializable]
ref class TestSimpleObject
{
private:
int member1;
String^ member2;
String^ member3;
double member4; public: // A field that is not serialized. [NonSerialized]
String^ member5; TestSimpleObject()
{
member1 = ;
member2 = "hello";
member3 = "hello";
member4 = 3.14159265;
member5 = "hello world!";
} void Print()
{
Console::WriteLine( "member1 = ' {0}'", member1 );
Console::WriteLine( "member2 = ' {0}'", member2 );
Console::WriteLine( "member3 = ' {0}'", member3 );
Console::WriteLine( "member4 = ' {0}'", member4 );
Console::WriteLine( "member5 = ' {0}'", member5 );
} }; int main()
{ //Creates a new TestSimpleObject object.
TestSimpleObject^ obj = gcnew TestSimpleObject;
Console::WriteLine( "Before serialization the Object* contains: " );
obj->Print();
//下面是序列化与反序列化过程
Stream^ stream = File::Open( "data.xml", FileMode::Create );
Stream^ stream = gcnew MemoryStream();
BinaryFormatter^ formatter = gcnew BinaryFormatter();
formatter->Serialize( stream, obj );
stream->Position = ;
array<Byte>^ buffer = gcnew array<Byte>(stream->Length); //定位到stream里面的Read方法,找到Read方法在这里面该怎么用。
stream->Read( buffer,,sizeof(buffer)); //使用 Read 读取数据块
stream->Flush();
stream->Close();
//Empties obj.
obj = nullptr; //Opens file S"data.xml" and deserializes the object from it.
stream = File::Open( "data.xml", FileMode::Open );
// formatter = gcnew SoapFormatter; formatter = gcnew BinaryFormatter();
obj = dynamic_cast<TestSimpleObject^>(formatter->Deserialize( stream ));
stream->Close();
Console::WriteLine( "" );
Console::WriteLine( "After deserialization the object contains: " );
obj->Print();
getch();
return ;
}

选中“解决方案”下的项目,点击“项目”-“引用”-“添加引用…”-“浏览”,现则使用的dll文件

在项目“属性”-“常规”-“公共语言运行库支持”中选择“公共语言运行库支持/clr”  。这个很重要。

在代码中使用 #using "system.dll" 来引用该动态库

使用 using namespace system; 来引用其名字空间

访问托管对象时使用“^” System::String ^hostname;可以理解为指针。托管对象的指针。

new对象时请使用 gcnew。

下面调用了.net里面的dll,然后序列化。

  //下面是序列化过程
//记得一点,UDP传输的过程中是字节流。 而序列化后是二进制流,必须把二进制流再转换为字节流才可以。
Stream^ stream = gcnew MemoryStream();
BinaryFormatter^ formatter = gcnew BinaryFormatter();
formatter->Serialize( stream, obj );
stream->Position = ;
// Now read s into a byte buffer.
array<Byte>^ buffer = gcnew array<Byte>(stream->Length); //必须定义这种结构,不然,Read函数会不认识。其实是用到了.net里面的array<Byte>
//类型的元素。
int numBytesToRead = (int) stream -> Length;
int numBytesRead = ;
while(numBytesToRead > )
{
int n = stream -> Read(buffer,numBytesRead,stream -> Length); //这里是Read函数的用法,将stream流里面的内容,写入buffer里面去。从0 位置开始写。长度stream -> Length;
if (n == )
{
break;
}
numBytesRead += n;
numBytesToRead -= n;
}
obj = nullptr; //释放内存
stream -> Close(); //关闭数据流
char* pointArray = new char[sizeof(buffer)]; //这是将array<Byte>类型转为char[]类型。但前提是buffer不能为指针,所以,以上的这句代码是错 的。但方法正确。
 for(int i=;i<sizeof(buffer);i++) 

      {
pointArray[i]=safe_cast<byte>(buffer[i]); // allows you to change the type of an expression and generate verifiable MSIL code. 27 }

什么是序列化?

对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。

哪些可以被序列化?

序列化分为3种:

截止至.NET 4.0总共有如下若干个序列化
1.xml序列化 XmlSerializer
2.二进制序列化 BinaryFormatter
3.Soap序列化 SoapFormatter
4.WCF序列化 DataContractSerializer
5.Json序列化 DataContractJsonSerializer和JavascriptSerializer

强调一点:

socket 、 udp 、 tcp之间的区别。

socket只是一种套接字,就是两台电脑两端的东西,中间传输以流的格式进行。

 IBEO好像是TCP/IP ,

 无论对于TCP和UDP,数据都是以帧的形式,打包传输的
数据量大的情况,会多传几个包
能否在短时间内发送完,取决于带宽。也就是说,带宽越大,它在网络中进行传输的时间几乎可以忽略。费得时间主要在数据解压这块,能否实时的解压,清空缓冲区,使得积压变小,这才是关键所在。
我们所说的UDP与TCP传64KB,是讲,他的每一包,或者说他的每一帧所最大携带的信息为64KB。就是说,一次所能携带的东西的数量。
可以认为是  工作量   ,然后工作速率为 1000M/s,0.6us。即传输时间为us级,几乎可以忽略不计。主要是每次最大可携带的数量是瓶颈。
然后,socket是套接字,主管两端,中间传输的协议只有两种,UDP/TCP,然后在不同的平台下,他的类是不一样的。
然后,.NET里面的也可以用UDPCLINT类来实现udp的功能。这些都是具体的类而已。千万别搞混了。
 
意味着一件事情,那就是我们搞雷达速度都被雷达本身的速率给限制住了,无法施展开来。
 
 
 

自定义序列化技术3 (.net 序列化技术) C++ 调用C# DLL的更多相关文章

  1. drf序列化高级、自定义只读只写、序列化覆盖字段、二次封装Response、数据库查询优化(断关联)、十大接口、视图家族

    目录 自定义只读 自定义只写 序列化覆盖字段 二次封装Response 数据库关系分析 断外键关联关系 ORM操作外键关系 ORM四种关联关系 基表 系列化类其他配置(了解) 十大接口 BaseSer ...

  2. java基础复习-自定义注解4(结合JDBC技术,打造类表映射微框架)

    写在前面: 1.该框架为自己所写的第一个框架类产品,可能有着许多不足的地方,读者可以到评论区指出.同时,该微框架的源码也会开源至博客中,够后来的学习者借鉴.由于该框架逻辑结构稍些复杂,不可能花大量篇幅 ...

  3. [.net 面向对象程序设计进阶] (13) 序列化(Serialization)(五) Json 序列化利器 Newtonsoft.Json 及 通用Json类

    [.net 面向对象程序设计进阶] (13) 序列化(Serialization)(五) Json 序列化利器 Newtonsoft.Json 及 通用Json类 本节导读: 关于JSON序列化,不能 ...

  4. 字定义JSON序列化支持datetime格式序列化

    字定义JSON序列化支持datetime格式序列化 由于json.dumps无法处理datetime日期,所以可以通过自定义处理器来做扩展,如: import json from datetime i ...

  5. C# 二进制序列化(BinaryFormatter),Xml序列化(XmlSerializer),自己模拟写一个Xml序列化过程。

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  6. 大前端技术系列:TWA技术+TensorFlow.js => 集成原生和AI功能的app

    大前端技术系列:TWA技术+TensorFlow.js => 集成原生和AI功能的app ( 本文内容为melodyWxy原作,git地址:https://github.com/melodyWx ...

  7. java序列化和反序列化及序列化方式

    平时我们在Java内存中的对象,是无 法进行IO操作或者网络通信的,因为在进行IO操作或者网络通信的时候,人家根本不知道内存中的对象是个什么东西,因此必须将对象以某种方式表示出来,即 存储对象中的状态 ...

  8. 解决Eclipse中文乱码 - 技术博客 - 51CTO技术博客 http://hsj69106.blog.51cto.com/1017401/595598/

    解决Eclipse中文乱码 - 技术博客 - 51CTO技术博客  http://hsj69106.blog.51cto.com/1017401/595598/

  9. hadoop序列化机制与java序列化机制对比

    1.采用的方法: java序列化机制采用的ObjectOutputStream 对象上调用writeObject() 方法: Hadoop 序列化机制调用对象的write() 方法,带一个DataOu ...

随机推荐

  1. [LOJ#2327]「清华集训 2017」福若格斯

    [LOJ#2327]「清华集训 2017」福若格斯 试题描述 小d是4xx9小游戏高手. 有一天,小d发现了一个很经典的小游戏:跳青蛙. 游戏在一个 \(5\) 个格子的棋盘上进行.在游戏的一开始,最 ...

  2. 洛谷P3832 [NOI2017]蚯蚓排队 【链表 + 字符串hash】

    题目链接 洛谷P3832 题解 字符串哈希然后丢到hash表里边查询即可 因为\(k \le 50\),1.2操作就暴力维护一下 经复杂度分析会发现直接这样暴力维护是对的 一开始自然溢出WA了,还以为 ...

  3. codeforces gym 100553I

    codeforces gym 100553I solution 令a[i]表示位置i的船的编号 研究可以发现,应是从中间开始,往两边跳.... 于是就是一个点往两边的最长下降子序列之和减一 魔改树状数 ...

  4. Python之面向对象:属性

    一.属性定义 1.类属性 类属性定义在类中且在函数体之外:类属性通常不作为实例属性使用:类变量紧接在类名后面定义 类属性的引用:类名.count eg:Employee.count 实例中可以引用类的 ...

  5. 如何清除全部的NSUserDefaults储存的数据。

    今天做项目遇到,如何清除全部的NSUserDefaults储存的数据. 方法1:找到所有的key然后remove掉 代码: [objc] view plain copy /** * 清除所有的存储本地 ...

  6. pat 甲级 1064. Complete Binary Search Tree (30)

    1064. Complete Binary Search Tree (30) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHE ...

  7. 洛谷P1135 奇怪的电梯

    题目描述 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都可以停电梯,而且第i层楼 (1<=i<=N)上有一个数字Ki(0<=Ki<=N).电梯只有四个按钮: ...

  8. 转一个网址,canvas用法

    http://blog.csdn.net/jia20003/article/details/9251893 http://www.w3school.com.cn/cssref/pr_animation ...

  9. poj 3261 Milk Patterns 后缀数组 + 二分

    题目链接 题目描述 给定一个字符串,求至少出现 \(k\) 次的最长重复子串,这 \(k\) 个子串可以重叠. 思路 二分 子串长度,据其将 \(h\) 数组 分组,判断是否存在一组其大小 \(\ge ...

  10. duilib入门简明教程 -- 界面设计器 DuiDesigner (10) (转)

    原文转自:http://www.cnblogs.com/Alberl/p/3343838.html     上一个教程讲解了怎么布局最大化.最小化.关闭按钮,但是如果手动去计算这三个按钮的位置和大小的 ...