首页 新闻 搜索 专区 学院

奇异的Pinvoke调用【求助】

0
悬赏园豆:50 [已关闭问题] 关闭于 2013-07-11 14:14

 我们的一个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台电脑执行到该方法时就报错:“有未处理的异常,堆已损坏。”

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

zhuweisky的主页 zhuweisky | 初学一级 | 园豆:136
提问于:2011-07-07 09:14
< >
分享
所有回答(2)
0

试试指定调用约定 CallingConvention=CallingConvention.Cdecl

缘起.缘灭 | 园豆:205 (菜鸟二级) | 2011-07-07 09:40
试过了,呵呵,不行
支持(0) 反对(0) zhuweisky | 园豆:136 (初学一级) | 2011-07-07 11:55
0

xvidcore这个dll在可执行文件所在目录下吗?版本对吗?如果不在可执行文件所在目录下,那么这个文件在dll搜索路径下吗?用regsvr32注册过吗?

荣耀属于跪拜猫 | 园豆:832 (小虾三级) | 2012-09-11 14:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册