这是我的原码,各位看看问题在那
vb代码执行没问题
Type GX_MESSAGE_INFO
    MessageCode     As Integer
    ChannelNo       As Integer
    Parameter(6)    As Integer
End Type
......
Declare Function GX_GetMessageForWindows Lib "GxVoice.dll" (ByVal WaitTime As Integer, ByRef MessageBuffer As GX_MESSAGE_INFO) As Integer
......
Dim MessageBuffer As GX_MESSAGE_INFO没有GX_GetMessageForWindows(10, MessageBuffer)//正常调用,返回正确的值我的c#代码,有问题
public struct GX_MESSAGE_INFO
{
public ushort MessageCode;
public ushort ChannelNo;
public ushort[] Parameter;
}
...........
[DllImport("GxVoice.dll")]
public static extern ushort GX_GetMessageForWindows(ushort WaitTimer, ref GX_MESSAGE_INFO MessageBuffer);
...........GX_MESSAGE_INFO messageInfo = new GX_MESSAGE_INFO();
...........GX_GetMessageForWindows(10,ref messageInfo);//messageInfo没有返回结果,是空的

解决方案 »

  1.   

    ushort 改为 int 试试,
    Parameter(6) As Integer 指的是长度为6的整形数组吗?如果是的话,改成 
    public int[] Parameter = new int[6];
      

  2.   

    vb6不太懂,如果Parameter(6) As Integer等效于C的int Parameter[6]的话(Integer的长度是32位还是16位?):public struct GX_MESSAGE_INFO
    {
    public ushort MessageCode;
    public ushort ChannelNo;
    [MarshalAs(ByValArray, SizeConst=6)]
    public ushort[] Parameter;
    }ushort可能需要换成int