vc++传结构体到C#中,为啥C#中的值 老是一样的!!

问题描述

vc+++structPoint{intx,y;int_x,_y;intwidth,height;intframeSum;floatlength;charpictureName[50];boolSuccess;intorder;floatarea;intX,Y;};C#[StructLayout(LayoutKind.Sequential)]publicstructPoint{intstar_x,star_y;intend_x,end_y;intwidth,height;intframeSum;floatlength;[MarshalAs(UnmanagedType.ByValArray,SizeConst=50)]//声明一个字符数组,大小为50char[]pictureName;boolSuccess;intorder;floatarea;intX,Y;};VC++charrecvstr[sizeof(Point)];memcpy(recvstr,&defectpoint,sizeof(Point));send(sockClient,recvstr,sizeof(Point),0);C#buffer=newbyte[1024];ns.Read(buffer,0,buffer.Length);Pointdefepoint=(Point)BytesToStruct(buffer,typeof(Point));帮帮忙在线等啊。

解决方案

解决方案二:
http://topic.csdn.net/u/20120528/17/8fc50d63-d913-4187-9354-da7310ec8efa.html回复下!!!!!!!!!!
解决方案三:
[MarshalAs(UnmanagedType.ByValArray,SizeConst=50)]//声明一个字节数组,大小为50byte[]pictureName;或者[MarshalAs(UnmanagedType.ByValTStr,SizeConst=50)]//声明一个字符串,大小为50stringpictureName;C++的char一个字节,等于C#的byte,C#的char两个字节,因此你就不能那么定义。
解决方案四:
引用2楼的回复:

[MarshalAs(UnmanagedType.ByValArray,SizeConst=50)]//声明一个字节数组,大小为50byte[]pictureName;或者[MarshalAs(UnmanagedType.ByValTStr,SizeConst=50)]//声明一个字符串,大小为50stringpictureName;C++的c……

嗯刚才查了下C#中char是2位我改成byte试试谢谢
解决方案五:
你有QQ吗 我加一下 我还有问题想请教就是 传过来的值总是第一次传的那些值
解决方案六:
你把传值调用的代码贴出来啊。

时间: 2025-01-30 16:26:05

vc++传结构体到C#中,为啥C#中的值 老是一样的!!的相关文章

c#调用C++的传结构体数组指针的问题

问题描述 C++的原型函数:CRTEXPORTCOURT_RECORD_RESCALLBACKCourtRecordGetKeyValue(COURT_PARAM_KEYkey,void*data);typedefenumCOURT_PARAM_KEY{KEY_MERGE_MAP,KEY_OUTPUT_MAP};data是根据不同的key来传入不同的结构体数组:现我用C#调用如下写法:[DllImport("CourtRecord.dll")]publicstaticexternCOU

控件结构体类型属性在属性页中显示各个变量可以直接赋值

问题描述 和Size一样,可以看到width和height并直接赋值,现在我只显示一个不可以修改的类型名称,要怎么样才能和Size一样都显示出来并直接赋值.谢谢!

C/C++中的结构体

什么是结构体? 简单的来说,结构体就是一个可以包含不同数据类型的一个结构,它是一种可以自己定义的数据类型,它的特点和数组主要有两点不同,首先结构体可以在一个结构中声明不同的数据类型,第二相同结构的结构体变量是可以相互赋值的,而数组是做不到的,因为数组是单一数据类型的数据集合,它本身不是数据类型(而结构体是),数组名称是常量指针,所以不可以做为左值进行运算,所以数组之间就不能通过数组名称相互复制了,即使数据类型和数组大小完全相同. 定义结构体使用struct修饰符,例如: struct test

c-C 语言中返回结构体指针,结果出来了,但是还是出现错误,不知道为什么

问题描述 C 语言中返回结构体指针,结果出来了,但是还是出现错误,不知道为什么 解决方案 p 没有初始化,也就是没有分配空间.典型的指针错误,不初始化,指针指向哪里呢? 解决方案二: array *p = new array(); 解决方案三: array p;test(&p); 解决方案四: 当然,使用指针应该首先初始化一个空地址的,否则,很容易发生指针地址错误其次,看了一下你的程序设计,程序本身是定义了一个array的结构体变量,在主函数中却要申请一个指针变量p(它的类型是结构体),一系列操

OC中的结构体变量和结构体指针变量的区别

问题描述 OC中的结构体变量和结构体指针变量的区别 OC中的结构体变量和结构体指针变量的区别?,请写出相同点和不同点 解决方案 指向结构体变量的指针指向结构体变量的指针引用结构体变量中的成员结构体中的指针变量输出 解决方案二: 一般来说结构变量定义的时候就分配了内存空间;但结构体指针,和其它指针一样,只有4个字节的指针大小,在使用时需要先动态的分配内存.

C++中结构体的类型定义和初始化以及变量引用_C 语言

C++结构体类型的定义和初始化 有时需要将不同类型的数据组合成一个有机的整体,以供用户方便地使用.这些组合在一个整体中的数据是互相联系的.例如,一个学生的学号.姓名.性别.年龄.成绩.家庭地址等项,都是这个学生的属性,见图 可以看到学号(num).姓名(name).性别(sex).年龄(age).成绩(score ).地址(addr)是与姓名为"Li Fun"的学生有关的.如果在程序中将num,name,sex,age,score,addr分别定义为互相独立的变量,就难以反映出它们之间

浅析C++中结构体的定义、初始化和引用_C 语言

定义:结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构. 声明一个结构体类型的形式是: 复制代码 代码如下: struct Student{      //声明一个结构体类型Student  int num;         //声明一个整形变量num  char name[20];   //声明一个字符型数组name  char sex;        //声明一个字符型变量sex  int age;         //声明一个整形变量age  float

C++中指向结构体变量的指针_C 语言

定义: 结构体变量的指针就是该变来那个所占据的内存段的起始地址.可以设一个指针变量,来指向一个结构体变量,此时该指针变量的值是结构体变量的起始地址. 设p是指向结构体变量的数组,则可以通过以下的方式,调用指向的那个结构体中的成员: (1)结构体变量.成员名.如,stu.num. (2)(*p).成员名.如,(*p).num. (3)p->成员名.如,p->num. 复制代码 代码如下: #include<iostream>#include<string>using na

C#调用C语言结DLL 结构体不会封装,怎么在C#中对应C语言的结构体呢

问题描述 //决策树节点typedefstruct{char*RecordData[1000][100];//训练数据intRecord_Number;/*训练数据的行数*/intAttribute_Number;/*训练数据的列数*/}TrainDataNode;typedefstructDecisionTreeNode{intkeynum;charSelectedAttributeName[30];//选择的属性名charAttributeValue[30];//属性值intRecord_M