当前位置:编程学习 > C#/ASP.NET >>

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

vc+++
struct Point
{
int x,y; 
int _x,_y; 
int width,height; 
int frameSum;
float length; 
char pictureName[50]; 
bool Success;
int order; 
float area; 
int X,Y;
} ;



C#
[StructLayout(LayoutKind.Sequential)]
    public struct Point
    {
    int star_x,star_y; 
    int end_x,end_y; 
    int width,height; 
    int frameSum;
    float length; 

    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 50)] // 声明一个字符数组,大小为50
    char[] pictureName; 
    
    bool Success; 
    int order; 
    float area; 
    int X,Y;
    };

VC++
char recvstr[sizeof(Point)];
memcpy(recvstr,&defectpoint,sizeof(Point));
send(sockClient,recvstr,sizeof(Point),0);

C#
 buffer = new byte[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)] // 声明一个字节数组,大小为50
byte[] pictureName; 
或者
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 50)] // 声明一个字符串,大小为50
string pictureName; 

C++的char一个字节,等于C#的byte,C#的char两个字节,因此你就不能那么定义。
--------------------编程问答--------------------
引用 2 楼  的回复:
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 50)] // 声明一个字节数组,大小为50
byte[] pictureName; 
或者
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 50)] // 声明一个字符串,大小为50
string pictureName; 

C++的c……


嗯 刚才查了下C#中char是2位   我改成byte试试  谢谢 --------------------编程问答-------------------- 你有QQ吗 我加一下 我还有问题想请教

就是 传过来的值总是第一次传的那些值  

--------------------编程问答-------------------- 你把传值调用的代码贴出来啊。
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,