解决方案 »

  1.   

    [StructLayout(LayoutKind.Sequential)]
    ........
      

  2.   

    调用非托管代码示例:
    using System;
    using System.Runtime.InteropServices;namespace QQloginCont
    {
    /// <summary>
    /// PlaySound 的摘要说明。
    /// </summary>
    public class PlaySound
    {
    public PlaySound()
    {
    //
    // TODO: 在此处添加构造函数逻辑
    //
    }
    [DllImport("winmm.dll")]
    private static extern long mciSendString(string strCommand, string strReturn, int iReturnLength, IntPtr hwndCallback);
    private static void GetWavAndOpen(int SoundId)
    {
    string sFileName;
    switch(SoundId)
    {
    case 1://系统消息
    sFileName="sound\\System.wav";
    break;
    case 2://收到消息
    sFileName="sound\\Msg.wav";
    break;
    case 3://功能切换
    sFileName="sound\\Folder.wav";
    break;
    default:
    sFileName="sound\\Call.wav";
    break;
    }
    string sCommand = "open \"" + sFileName + "\" type mpegvideo alias MediaFile"; //   MediaFile是选择播放文件类型 
    string ret = null;
    mciSendString(sCommand, ret, 0, IntPtr.Zero);
    }
    public static void play(int SoundId)
    {
    StopPlay();
    GetWavAndOpen(SoundId);
    string sCommand = "play MediaFile";
    string ret = null;
    mciSendString(sCommand, ret, 0, IntPtr.Zero);
    }
    private static void StopPlay()
    {
    string sCommand = "close MediaFile";
    string ret = null;
    mciSendString(sCommand, ret, 0, IntPtr.Zero);
    }
    }
    }
      

  3.   

    public struct HI_S_STREAM_INFO
     {
        public uint u32Channel;      /*通道号 */
            public uint blFlag;            /*HI_TRUE:连接主码流,HI_FALSE:连接次码流*/
        public uint u32Mode;         /*网络连接模式*/
            public byte u8Type;         /*流数据类型,视频,音频,其他数据*/
     };
    这是c++的原型???
      

  4.   

    public struct HI_S_STREAM_INFO
     {
        public uint u32Channel;      /*通道号 */
            public uint blFlag;            /*HI_TRUE:连接主码流,HI_FALSE:连接次码流*/
        public uint u32Mode;         /*网络连接模式*/
            public byte u8Type;         /*流数据类型,视频,音频,其他数据*/
     };
    这是C#的
      

  5.   

    我已经加了[StructLayout(LayoutKind.Sequential)],但还是报同样的错误
      

  6.   

    把你DLL 的  此结构体 和 原型贴出来。有可能是你C#的结构体类型与SDK有偏差,导致内存越界了。