zoukankan      html  css  js  c++  java
  • 奇异的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上面的方法,在某些机器上就会抛出异常。但是为何会这样奇怪了?不得其解。

  • 相关阅读:
    时尚生活小秘方[转载]
    武侠片上的99个公式镜头
    SQL语句优化技术分析
    LoadRunner监视的性能计数器
    圣诞收到最搞笑的短信两则
    loadrunner 运行状态描述
    ORACLE 常用脚本[转载]
    关于内存泄漏检测问题,和大家一起分享
    小笑话
    [转贴] ++ 一个北大女孩给男友的道歉信(爆笑!!!)相当经典
  • 原文地址:https://www.cnblogs.com/zhuweisky/p/2099726.html
Copyright © 2011-2022 走看看