这其实是C#中使用指针的问题,给你个类似参考以下的代码功能是限制窗体大小,其中就要处理结构指针// 声明Winodws消息常量
private const int WM_SIZEING = 0x0214;// 声明RECT结构
public struct RECT
{
public int left;
public int top;
public int right;
public int bottom;
}// 以下是处理WINDOWS消息的主要代码
protected override void WndProc(ref System.Windows.Forms.Message m )
{
switch(m.Msg) 

case WM_SIZEING: ///*****以下各种方法,生成代码大小顺序是由小到大
 
// 第一种方法,简洁明了
// RECT rc = (RECT)m.GetLParam(typeof(RECT)); // 第二种方法,普适通用。代码比第一种方法多 5 字节
// RECT rc=(RECT)Marshal.PtrToStructure(m.LParam ,typeof(RECT)); // 第三种方法,易懂稍繁。代码比第二种方法多 4 字节
RECT rc = new RECT();
rc = (RECT)m.GetLParam(rc.GetType());
// 限制窗体宽度不超过600
if (rc.right - rc.left >450)
{
rc.right = rc.left + 450;
}
else if (rc.right - rc.left <200)
{
rc.right = rc.left + 200;
} // 将结构rc复制到m.LParam指针所指向的RECT结构
Marshal.StructureToPtr(rc,m.LParam,true); break;
default: 
base.WndProc(ref m);   // 调用基类函数处理其他消息。 
break; 

}

解决方案 »

  1.   

    谢谢你,但还是不行
    Report Rept = new Report();
    Rept = (Report)getReport();
    获得rept.sms_id还是26931258,其实sms_id要=15才对的
      

  2.   

    C++的结构体跟C#的存储方式不一样,
    你可以试试[in,out]这种特性定义下参数
      

  3.   

    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
    public   struct   RECT 

    public   int   left; 
    public   int   top; 
    public   int   right; 
    public   int   bottom; 

      

  4.   

    提供参考: 
     [StructLayout(LayoutKind.Sequential)]
      public class MySystemTime
     {
         public ushort wYear;
         public ushort wMonth;
         public ushort wDayOfWeek;
         public ushort wDay;
         public ushort wHour;
         public ushort wMinute;
         public ushort wSecond;
         public ushort wMilliseconds;
     }