我们的一个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上面的方法,在某些机器上就会抛出异常。但是为何会这样奇怪了?不得其解。

奇异的Pinvoke调用相关推荐

  1. PInvoke调用导致堆栈不对称

    在SendMessage()时出错,原因:.net2.0 中加入了(Managed debugging assistant),在平台调用时检查栈的指针,如果发现不平衡,就会抛出PInvokeImbal ...

  2. c#编程指南(十二) 平台调用P-INVOKE完全掌握, 结构体边界对齐和内存布局

    在使用结构体指针,进行C#和C++的互相调用.边界对齐是一个大问题,因为边界对齐问题,结构体的成员并不是顺序在内存一个挨着一个的排序. 而且在C++中可以使用#pragma pack(n)改变边界对齐 ...

  3. 推荐官方开源 PInvoke 库 包含大量 win32 封装

    在调用 win32 库的时候,小伙伴会遇到的问题是不知道对应的 win32 函数应该如何写.或者在网上抄了的代码的实现都有些诡异,想要自己封装发现工作量太大.好消息是官方将 PInvoke 库在 do ...

  4. WPF拖放功能实现zz

    写在前面:本文为即兴而作,因此难免有疏漏和词不达意的地方.在这里,非常期望您提供评论,分享您的想法和建议. 这是一篇介绍如何在WPF中实现拖放功能的短文. 首先要读者清楚的一件事情是:拖放主要分为拖放 ...

  5. Silverlight 5的时间表及大量问题

    近期微软在Silverlight FireStarter活动中宣布了Silverlight在2011年的时间表.Silverlight 5是Scott Guthrie的演讲主题,在其中微软演示了很多即 ...

  6. NETCF运行平台检测

    该文章参考了https://blogs.msdn.com/netcfteam/archive/2006/09/15/756755.aspx,上面详细介绍了如何在程序中检测NETCF的各种运行平台,此处 ...

  7. 使用WPF和.NET 6将Windows应用程序迁移到Windows on Arm

    目录 先决条件 介绍 测试应用 使应用程序在Aarch64设备上运行 结果 Aarch64-Native .NET 为Aarch64编译 TSP.WPF.csproj 结论 下一步 将Windows ...

  8. 【翻译】MSIL 教程(一)

    在网上发现了一个非常好的MSIL教程,可惜是英文版的,于是就翻译了一下,与大家共享, 原文http://www.codeguru.com/Csharp/.NET/net_general/il/arti ...

  9. Visual C++ 新增功能(2003 - 2015)

    本页面包括从 Visual Studio 2003 到 Visual Studio 2015 的所有 Visual C++ 版本的"新增功能"页. 提供这些信息的目的是方便用户从早 ...

最新文章

  1. 大数据分析的5个方面
  2. mysql 临时表 事务_MySQL学习笔记十:游标/动态SQL/临时表/事务
  3. mysql如何从两个表取出内容_如何从mysql中的两个表中获取数据?
  4. 巨波公第3子登国公后裔在荆州(巨波公6子的后裔,全部水落石出)
  5. mysql 表名 字段名_MySQL 查询所有数据库名和表名及字段名
  6. Android页面跳转(Intent)
  7. c语言分段函数x2-sinx,大学高等数学: 第二章第五讲三种分段函数求导法, 再也不担心了...
  8. mysql中1和0分别代表什么
  9. 级联引用完整性约束ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }
  10. 大数据概论、大数据概念、大数据特点(4V)、Volume(大量)、Velocity(高速)、Variety(多样)、Value(低价值密度)、大数据应用场景、大数据发展前景、大数据部门间业务流程分析
  11. 深圳百元赠送话费11月20日前启动充
  12. python操作xslx/xsl出现‘\xa0‘和读取时间变成float类型的处理办法
  13. 2022茶艺师(初级)考试模拟100题模拟考试平台操作
  14. Docker下删除镜像报错 (cannot be forced) - image has dependent child images
  15. linux sendmail
  16. Ubuntu操作系统如何截图
  17. C语言 请使用short int型的变量计算两个7位十进制整数的和,要求使用尽可能少的变量
  18. 云计算hcie贴吧_云计算HCIE题库
  19. 初学ps画出简易的五子棋盘
  20. 基于物联网的智能家居控制系统【100010619】

热门文章

  1. 获取当前ip_write_ip_tcl命令你用过吗?
  2. 磁盘格式 mac android,MacDroid for mac(安卓手机数据传输助手)
  3. mysql 不认的字符串_mysql 判断字符串是否为其他字符串的子集
  4. postman上传多个文件_不要只会使用 postman,你还需掌握 curl 的使用!
  5. 有一个计算机在桌子上用英语怎么写,什么在桌子上的英文怎么写
  6. redis 失效时间单位是秒还是毫秒_redis分布式锁的这些坑,我怀疑你是假的开发...
  7. H5+个推实现消息推送服务
  8. mysql 视图调用存储过程,是否可以在视图中调用存储过程?
  9. R语言预测初步(R语言预测实战-节选)
  10. oracle 删除xml记录,Oracle之xml的增删改查操作