奇异的Pinvoke调用

    我们的一个C#项目需要调用C++的dll,通过Pinvoke进行方法调用。其中的一个方法及其参数的定义是这样的:

    [ StructLayoutAttribute     ( LayoutKind .Sequential)]
    public   struct   xvid_gbl_info_t        
    {
        ///  int
         public   int  version;

        
///  int
         public   int  actual_version;

        
///  char*
        [ MarshalAsAttribute ( UnmanagedType .LPStr)]
        public   string  build;

        
///  unsigned int
         public   uint  cpu_flags;

        
///  int
         public   int  num_threads;
    }
 
    [
DllImportAttribute( " xvidcore " , EntryPoint  =   " xvid_global " )]
    
public   static   extern   int  xvid_global( IntPtr  handle,  int  opt,  ref   xvid_gbl_info_t  param1,  IntPtr  param2); 

    在做demo时,一切正常,而且在测试的7台电脑上均能正常运行。

    但到正式项目中,完全一样的调用模式,却有3台电脑正常运行,4台电脑执行到该方法时就报错:“有未处理的异常,堆已损坏。”

    昨天晚上搞到半夜,仍然是如此,奇怪!希望有大侠能指教一二,感激不尽。

 

   注:问题已经解决,原因是不能调用静态方法和成员,如果先调用了静态方法和成员,再调用Pinvoke上面的方法,在某些机器上就会抛出异常。但是为何会这样奇怪了?不得其解。

 

 

你可能感兴趣的:(in)