在 64 位进程中加载​​ 32 位 dll [重复]

2023-12-08

我希望我的 C# 应用程序有条件地运行本机方法,有条件地选择运行 dll 的 x86 或 x64 版本。每当我尝试加载 32 位 dll 时,都会收到以下错误:

Unhandled Exception: System.BadImageFormatException: An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)
   at <exeName>.MiniDumpMethods.MiniDumpWriteDumpX86(IntPtr hProcess, UInt32 processId, SafeHandle hFile, MINIDUMP_TYPE dumpType, IntPtr expParam, IntPtr userStreamParam, IntPtr callbackParam)

背景背景:我希望我的二进制文件能够获取给定进程的内存转储。根据进行内存转储的进程是 32 位还是 64 位,它将选择从 x86 或 x64 版本的 dbghelp.dll 运行 MiniDumpwriteDump 方法。

我目前正在执行以下操作:

[SuppressUnmanagedCodeSecurity]
internal static class MiniDumpMethods
{
    [DllImport("dbghelp.dll",
        EntryPoint = "MiniDumpWriteDump",
        CallingConvention = CallingConvention.StdCall,
        CharSet = CharSet.Unicode,
        ExactSpelling = true,
        SetLastError = true)]
    [return: MarshalAs(UnmanagedType.Bool)]
    public static extern bool MiniDumpWriteDump(
        IntPtr hProcess,
        uint processId,
        SafeHandle hFile,
        MINIDUMP_TYPE dumpType,
        IntPtr expParam,
        IntPtr userStreamParam,
        IntPtr callbackParam);

[DllImport("dbghelpx86.dll",
EntryPoint = "MiniDumpWriteDump",
CallingConvention = CallingConvention.StdCall,
CharSet = CharSet.Unicode,
ExactSpelling = true,
SetLastError = true)]
    [return: MarshalAs(UnmanagedType.Bool)]
    public static extern bool MiniDumpWriteDumpX86(
        IntPtr hProcess,
        uint processId,
        SafeHandle hFile,
        MINIDUMP_TYPE dumpType,
        IntPtr expParam,
        IntPtr userStreamParam,
        IntPtr callbackParam);
}

知道如何有条件地加载 dll 的 x86 或 x64 版本吗?

(注:dbghelpx86.dll是我重命名的x86版本的dbghelp.dll)

Thanks


您无法将 32 位 DLL 加载到 64 位进程中。为了支持这一点,您必须有两个不同的 EXE,一个编译为 64 位,另一个编译为 32 位。

如果运行 64 位进程并遇到 32 位转储,则必须启动 32 位版本的 EXE 来处理转储文件。处理完成后,您可以使用某种 IPC(进程间通信)机制将结果发送回 64 位进程。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 64 位进程中加载​​ 32 位 dll [重复] 的相关文章

  • Environment.CurrentDirectory 与 System.IO.Directory.GetCurrentDirectory

    我正在编写一个 Net WinForms 并不断在调试和发布配置之间切换 并且有一些文件我需要任一配置才能访问 我想做的是将文件放在 BIN 文件夹中的公共目录中 这样它看起来像这样 MyProject Bin CommonFiles My
  • 如何在类文件中使用 Url.Action() ?

    如何在 MVC 项目的类文件中使用 Url Action Like namespace 3harf public class myFunction public static void CheckUserAdminPanelPermissi
  • 按扩展名过滤搜索文件返回太多结果

    我正在开发一个 C 控制台应用程序 它必须管理 Windows 操作系统上的文件 我需要获取具有特定扩展名的文件名 列表 我找到了很多解决方案 最建议的是以下一种 HANDLE hFind WIN32 FIND DATA data hFin
  • 从复选框列表中选择循环生成的复选框中的一个复选框

    抱歉我的英语不好 在我的 ASP NET 网站上 我从 SQL 表导入软件列表 看起来像这样 但实际上要长得多 Microsoft Application Error Reporting br br Microsoft Applicatio
  • 如何将 SOLID 原则应用到现有项目中

    我对这个问题的主观性表示歉意 但我有点卡住了 我希望之前处理过这个问题的人能够提供一些指导和建议 我有 现在已经成为 一个用 C 2 0 编写的非常大的 RESTful API 项目 并且我的一些类已经变得巨大 我的主要 API 类就是一个
  • 如何将 .txt 文件中的数据转换为 xml? C#

    我在一个文本文件中有数千行数据 我想通过将其转换为更容易搜索的内容来轻松搜索 我希望 XML 或其他类型的大型数据结构 尽管我不确定它是否是最好的对于我的想法 每行的数据如下所示 第 31 册 托马斯 乔治 32 34 154 每本书都不是
  • cpp.react库的C++源代码中奇怪的“->* []”表达式

    这是我在文档中找到的 C 片段cpp react 库 https github com schlangster cpp react implicit parallelism auto in D MakeVar 0 auto op1 in g
  • RestSharp获取序列化输出

    我正在寻找一种方法来访问 AddBody 调用的序列化结果 我正在使用内置的 RestSharp 序列化器 例子 class Foo public string FooField void SendRecord var f new Foo
  • 如何使用 Regex.Replace 从字符串中删除数字?

    我需要使用Regex Replace从字符串中删除所有数字和符号 输入示例 123 abcd33输出示例 abcd 请尝试以下操作 var output Regex Replace input d string Empty The d标识符
  • 不同 C++ 文件中的相同类名

    如果两个 C 文件具有相同名称的类的不同定义 那么当它们被编译和链接时 即使没有警告也会抛出一些东西 例如 a cc class Student public std string foo return A void foo a Stude
  • 什么是空终止字符串?

    它与什么不同标准 字符串 http www cplusplus com reference string string 字符串 实际上只是一个数组chars 空终止字符串是指其中包含空字符的字符串 0 标记字符串的结尾 不一定是数组的结尾
  • 如何使用 ASP.NET Core 获取其他用户的声明

    我仍在学习 ASP NET Core 的身份 我正在进行基于声明的令牌授权 大多数示例都是关于 当前 登录用户的 就我而言 我的 RPC 服务正在接收身份数据库中某个用户的用户名和密码 我需要 验证是否存在具有此类凭据的用户 获取该用户的所
  • 如何递归取消引用指针(C++03)?

    我正在尝试在 C 中递归地取消引用指针 如果传递一个对象 那就是not一个指针 这包括智能指针 我只想返回对象本身 如果可能的话通过引用返回 我有这个代码 template
  • 在 C# 中为父窗体中的子窗体控件添加事件处理程序

    我有两种形式 一种是带有按钮和文本框的父表单 单击该按钮时 将打开一个对话框 该子窗体又包含一个文本框和一个按钮 现在我想要的是 每当子表单文本框中的文本更改时 父表单文本框中的文本会自动更改 为了获得这个 我所做的是 Form3 f3 n
  • 模板类的模板构造函数的 C++ 显式模板特化

    我有一个像这样的课程 template
  • C++:二叉树所有节点值的总和

    我正在准备面试 我被一个二叉树问题困住了 我们如何计算二叉树所有节点中存在的值的总和 优雅的递归解决方案 伪代码 def sum node if node NULL return 0 return node gt value sum nod
  • 了解 Lambda 表达式和委托 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我已经尝试解决这个问题很长一段时间了 阅读在线博客和文章 但到目前为止还没有成功 什么是代表 什么是 Lambda 表达式 两者的优点
  • 如何在 sql azure 上运行 aspnet_regsql? [复制]

    这个问题在这里已经有答案了 可能的重复 将 ASP NET 成员资格数据库迁移到 SQL Azure https stackoverflow com questions 10140774 migrating asp net membersh
  • 在 System.Type 上使用条件断点时出错

    这是函数 public void Init System Type Type this Type Type BuildFieldAttributes BuildDataColumns FieldAttributes 我在第一行设置了一个断点
  • 我可以使用 lambda 函数或 std::function 对象来代替函数指针吗?

    我有一个需要使用的库 它定义了以下内容 typedef void CallbackFunction const int i 并且有一个注册回调的函数 如下所示 void registerCallback CallbackFunction p

随机推荐

  • 在 Windows 上的 Matlab 中使用 getframe

    I used the code which I asked about here but added in the final loop the ani ii getframe and after the loop movie2avi an
  • 致命错误 LNK1158:无法运行“mt.exe”

    我知道问题编译 VS 2012 C 项目时出现致命错误 无法运行 mt exe 但我对那里的答案不满意 我将我的 Visual Studio 项目从 VS2010 转换为 VS2012 但是当我编译我的解决方案时 我收到 致命错误 LNK1
  • 编写C#插件系统

    我正在尝试编写一个插件系统 为我的应用程序提供一些可扩展性 以便有人可以为该应用程序编写插件 而无需触及主应用程序的代码 并有破坏某些内容的风险 我已经编写了基本的 IPlugin 接口 atm 尚未实现任何内容 这是我的加载方式 publ
  • 如何在上传文件时添加进度条

    我正在将文件传输到网址 我可以成功完成 但我不知道如何获取已上传文件的进度 我需要获取某些数字的进度 fileTransfer upload file path api endpoint options data then data gt
  • 捕获没有文本框的键盘输入

    我有一个应用程序 可以从健康卡中读取数据并解析它们以获取出生日期 健康卡 和姓名等基本信息 现在 我有一个文本框 可以从刷卡器中获取输入 效果很好 但我觉得可能有更好的方法 我希望在应用程序的后台有一个键盘侦听器 它可以捕获刷卡器的输入并解
  • Crystal Reports - 计数公式

    我正在 Crystal 中开发一份报告 我需要对具有几种不同状态的特定字段进行计数 例如 我的报告中有一个 StatusType 字段 其中包含的值是 In Process Rejected On Hold or Submitted 我希望
  • 如何检查是否给出了参数?

    Checks if an argument was specified if argv 1 strcpy Buff1 argv 1 else strcpy Buff1 default 如果我运行 program test 增益1 测试 如果
  • Epson epos sdk收据对齐问题

    我目前正在使用适用于 Android 的 epson ePOS SDK 我需要打印收据 菜单名称在同一行中左对齐 价格右对齐 但它无法正常工作 我的临时解决方案是添加一些提要行以使其价格正确对齐 是否可以使文本在同一行中左右对齐 以下附件
  • RecyclerView 中的 Admob 原生广告 [重复]

    这个问题在这里已经有答案了 我想在我的一个具有 recyclerview 的报价应用程序中实施 admob 原生广告 我正在学习 android 编程 并试图找到原生广告的教程 但没有任何好的教程可用于在 recyclerview 中实现原
  • Swift 无法通过委托调用协议方法

    我有两节课 一个类被命名为ViewController另一个类名为TabView 我的目标是调用一个函数changeTab 它位于 ViewController 的 TabView 类内部 不知怎的 我遇到了麻烦 因为每次我的代表nil 这
  • 在传递给 mysql_query 之前有效地转义 C 中的引号

    简而言之 我通常使用 sprintf 在 C 中构建 MySQL 查询 i e sprintf sqlcmd update foo set dog lab where description s some desc mysql query
  • 在 Vim 中缩进 Javascript - 函数中 Lambda 函数的问题

    我在 vim 中遇到 JavaScript 缩进问题 一切都很好 除了内联函数作为函数参数的缩进不起作用 这是一个只有 javascript 的问题 不涉及 html Example someFunc function if foo bar
  • Base64 编码 .Rda 文件

    All 我正在尝试弄清楚如何将 Rda 文件放入 Base64 编码中 以便将其传送到 API 或从 API 传送出来 我真的很苦恼如何做到这一点 这是我得到的 但我认为它偏离了目标 cuse lt read table http data
  • 设置TKinter标签的位置?

    我正在尝试制作一个程序 在窗口的左下角和右下角放置一个标签 我的代码如下 root Tk root geometry 1000x250 var StringVar label Label root textvariable var var
  • 使用 karate.forEach 和 karate.set 从 json 数组中提取值的索引

    我有以下 json id 1A 2B name rs mk 我想提取名称为 rs 或 mk 时的id值 不会出现重复的情况name值和大小id and name键将始终匹配 所以我创建了以下场景 我迭代了name使用 forEach 的数组
  • 解析 ruby​​ 中的字符串日期,例如“28-May-10”

    我尝试使用解析 Date parse 28 May 10 to s Returns 0010 5 28 距离现在还有 2000 年 我怎样才能让 ruby 正确解释两位数年份 谷歌上有很多字符串到日期的转换技巧 但大多数处理数字月份而不是
  • SerialPort 类和 DataReceived 事件...获取字节。使用 ReadLine 还是 ReadExisting?有什么例子吗?

    我想通过串行发送和接收字节 我的接收器应该异步获取字节 我写了下面的小例子 看起来可行 但它给我留下了一种不安的感觉 我真的应该使用 WriteLine ReadLine 吗 正如现在所写 是否有可能为每个字节调用事件处理程序 m port
  • cmake - 未定义的引用

    我是新来的cmake并且知道这个问题之前已经被问过 但仍然找不到我做错了什么 我有一个带有文件夹的外部库 include and lib The include文件夹包含所有标题 h 和 lib文件夹包含所有源 c files 在我的项目中
  • 错误:参数类型 double/string 等不符合预期类型“AnyObject”

    我看了一些 iOS 编程教程 并对 AnyObject 有疑问 桥接不起作用 我有以下代码 import Foundation class CalculatorBrain private var accumulator 0 0 var in
  • 在 64 位进程中加载​​ 32 位 dll [重复]

    这个问题在这里已经有答案了 我希望我的 C 应用程序有条件地运行本机方法 有条件地选择运行 dll 的 x86 或 x64 版本 每当我尝试加载 32 位 dll 时 都会收到以下错误 Unhandled Exception System