日期:2014-05-20  浏览次数:20821 次

关于结构赋值的问题,高手进
[StructLayout(LayoutKind.Sequential)]
        struct   TGlobalData
        {
                public   int   AppHandle;
                public   int   Login;
                [MarshalAs(UnmanagedType.ByValArray,   SizeConst   =   32)]
                public   char[]   Master;
                [MarshalAs(UnmanagedType.ByValArray,   SizeConst   =   128)]
        }
这是我定义的一个结构。往里面赋值后,给Dellp写的dll调用,就会报数组越界的问题。请问什么问题;我这样赋值的:
TGlobalData   gdata   =   new   TGlobalData();
string   strMaster   =   "master ";
gdata.Master   =   strMaster.ToCharArray();




------解决方案--------------------
换成byte[]看看
其他dll里的char估计是1个自己,而C#中的char是两个字节
public byte[] Master;
[StructLayout(LayoutKind.Sequential)]
struct TGlobalData
{
public int AppHandle;
public int Login;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
public byte[] Master;
}

private void button1_Click(object sender, EventArgs e)
{
TGlobalData gdata = new TGlobalData();
string strMaster = "master ";
gdata.Master = Encoding.Default.GetBytes(strMaster);
}

------解决方案--------------------
Dellp?是啥?DELL笔记本P?
原始声明是怎样的?
------解决方案--------------------
还是没有看到DLL函数接口原始的声明
function fname(param: TGlobalData): Boolean; ??

还有C#中的函数声明??

Delphi的默认函数参数调用方式是pascal
C#里是stdcall

有没有Delphi里的调用例子?
------解决方案--------------------
up