api.dll  内含结构指针
typedef struct _UOSVERSIONINFO
{
DWORD dwMajorVersion; //主版本号
DWORD dwMinorVersion; //次版本号
DWORD dwBuildNumber;  //编译版本号
} UOSVERSIONINFO, *LPUOSVERSIONINFO;请问应该怎么样调用这个 dll 并获取其中的版本数据,类型应当怎么样转换,谢谢

解决方案 »

  1.   

    定义为如下对应的结构!C#调用
        [StructLayout(LayoutKind.Sequential)]
        public struct UOSVERSIONINFO
        {
            [MarshalAs(UnmanagedType.U4)]
            public float dwMajorVersion; //主版本号
            [MarshalAs(UnmanagedType.U4)]
            public float dwMinorVersion; //次版本号
            [MarshalAs(UnmanagedType.U4)]
            public float dwBuildNumber;  //编译版本号    }
      

  2.   

    楼上正解就是对不安全代码的调用加上attribute标签就可以了
      

  3.   

    [ StructLayout( LayoutKind.Sequential )]
     public class OSVersionInfo 
     {
          public int OSVersionInfoSize;
          public int MajorVersion;
      public int MinorVersion;
      public int BuildNumber; 
      public int PlatformId;
         [ MarshalAs( UnmanagedType.ByValTStr, SizeConst=128 )]    
          public String versionString;
     }
     [ StructLayout( LayoutKind.Sequential )]  
     public struct OSVersionInfo2 
     {
          public int OSVersionInfoSize;
          public int MajorVersion;
      public int MinorVersion;
      public int BuildNumber; 
      public int PlatformId;
         [ MarshalAs( UnmanagedType.ByValTStr, SizeConst=128 )]
          public String versionString;
     }
    //API声明:
    [ DllImport( "kernel32" )]
         public static extern bool GetVersionEx( [In, Out] OSVersionInfo osvi );
      [ DllImport( "kernel32", EntryPoint="GetVersionEx" )] 
         public static extern bool GetVersionEx2( ref OSVersionInfo2 osvi );
      

  4.   

    上述方法中,我应当怎么样调用对象从而获取
      MajorVersion;
      MinorVersion;
      BuildNumber;
    的值呢?
      

  5.   

    在返回的OSVersionInfo ,OSVersionInfo2中不是有那些信息了吗
    具体请参考:
    http://www.pconline.com.cn/pcjob/process/other/others/0412/513944.html