string返回值有问题,你看看charset如果C++一边只是读取LPSTR的内容,用string就可以了。
不过记得CharSet需要设定为CharSet.Ansi。

解决方案 »

  1.   

    我改成这样还是错
    [DllImport("HDSerialNumRead.dll",CharSet=CharSet.Auto)]
    private static extern string HDSerialNumRead();
    public static string IDESerialNum()
    {
    return HDSerialNumRead();
    }
      

  2.   

    硬盘号:[System.Runtime.InteropServices.DllImport("kernel32.dll" , EntryPoint="GetVolumeInformationA")]
    private extern static int GetVolumeInformation( string lpRootPathName , string lpVolumeNameBuffer , int nVolumeNameSize , ref int lpVolumeSerialNumber ,int lpMaximumComponentLength , int lpFileSystemFlags ,string lpFileSystemNameBuffer , int nFileSystemNameSize );

    public static string GetDriveVolumeSerialNumber(string Drive)
    {
    int VolumeSerialNumber = 0;

    GetVolumeInformation(Drive + ":\\", "", 255, ref VolumeSerialNumber, 0, 0, "", 255);     

    return VolumeSerialNumber.ToString( "X" ).Insert( 4 , "-" );
    }
      

  3.   

    lkal4587(LuxuRy Lab) 你说的这个方法是取得硬盘在格式化后生成的序列号,每次格式化后都不一样!
    不是硬盘出厂的序列号。
      

  4.   

    参考你的另一个帖子.
    http://expert.csdn.net/Expert/TopicView3.asp?id=1450630