C#:根据平台访问 32 位/64 位 DLL

2024-01-03

我们使用 C# 应用程序中自行编写的 32 位 C++ DLL。现在我们注意到,当 C# 应用程序在 64 位系统上运行时,会自动使用 64 位运行时,当然无法从 64 位运行时访问 32 位 DLL。

我的问题是:有没有办法使用32位DLL?如果不是,如果我创建了 DLL 的 64 位版本,是否可以轻松地让应用程序选择要 P/Invoke 的哪一个?

我正在考虑在 C# 中创建两个辅助类:一个从 32 位 DLL 导入函数,另一个从 64 位 DLL 导入,然后为每个调用 32 位导入器或64 位导入程序取决于操作系统的“位数”。那行得通吗?

或者还有其他简单的方法来做事吗?


您需要确保在 64 位编译时仅对 64 位 DLL 使用 P/Invoke 调用。

一种选择是将所有“方法”移至标准接口(或抽象基类)中,并提供 2 种实现,一种 32 位和一种 64 位。您可以使用工厂方法根据 IntPtr 的大小构造适当的类实例。

这允许“AnyCPU”应用程序在运行时正确确定要 P/调用哪个 DLL,并且可以正常工作。

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

C#:根据平台访问 32 位/64 位 DLL 的相关文章

  • 在 LINQ 查询中返回不带时间的日期

    我正在编写一个查询 我想计算按日期联系我们的呼叫中心的次数 看起来很简单 但由于联系日期字段是日期时间字段 我得到了时间 因此当我按联系日期 时间 分组时 每个联系日期实例的计数为 1 所以 我想只按日期分组 而不按时间分组 下面是我用来查
  • 如何在 Unity 中从 RenderTexture 访问原始数据

    问题的简短版本 我正在尝试访问 Unity 中 RenderTexture 的内容 我一直在使用 Graphics Blit 使用自己的材质进行绘制 Graphics Blit null renderTexture material 我的材
  • C++ 求二维数组每一行的最大值

    我已经设法用这个找到我的二维数组的每一行的最小值 void findLowest int A Cm int n int m int min A 0 0 for int i 0 i lt n i for int j 0 j lt m j if
  • 嵌入式系统中的malloc [重复]

    这个问题在这里已经有答案了 我正在使用嵌入式系统 该应用程序在 AT91SAMxxxx 和 cortex m3 lpc17xxx 上运行 我正在研究动态内存分配 因为它会极大地改变应用程序的外观 并给我更多的力量 我认为我唯一真正的路线是为
  • C# 中值类型和引用类型有什么区别? [复制]

    这个问题在这里已经有答案了 我知道一些差异 值类型存储在堆栈上 而引用类型存储在托管堆上 值类型变量直接包含它们的值 而引用变量仅包含对托管堆上创建的对象位置的引用 我错过了任何其他区别吗 如果是的话 它们是什么 请阅读 堆栈是一个实现细节
  • C# 中可空类型是什么?

    当我们必须使用nullable输入 C net 任何人都可以举例说明 可空类型 何时使用可空类型 https web archive org web http broadcast oreilly com 2010 11 understand
  • 使用 C# 在 WinRT 中获取可用磁盘空间

    DllImport kernel32 dll SetLastError true static extern bool GetDiskFreeSpaceEx string lpDirectoryName out ulong lpFreeBy
  • 写入和读取文本文件 - C# Windows 通用平台应用程序 Windows 10

    有用 但在显示任何内容之前 您必须在文本框中输入内容 我想那是因为我使用了 TextChanged 事件处理程序 如果我希望它在没有用户交互的情况下显示文本文件的内容 我应该使用哪个事件处理程序 因此 我想在按下按钮时将一些数据写入 C W
  • 如何针对 Nancy 中的 Active Directory 进行身份验证?

    这是一篇过时的文章 但是http msdn microsoft com en us library ff650308 aspx paght000026 step3 http msdn microsoft com en us library
  • 在 ASP.Net Core 2.0 中导出到 Excel

    我曾经使用下面的代码在 ASP NET MVC 中将数据导出到 Excel Response AppendHeader content disposition attachment filename ExportedHtml xls Res
  • 使用 LINQ 查找列表中特定类型的第一个元素

    使用 LINQ 和 C 在元素列表中查找特定类型的第一个项目的最短表示法是什么 var first yourCollection OfType
  • 我的 strlcpy 版本

    海湾合作委员会 4 4 4 c89 我的程序做了很多字符串处理 我不想使用 strncpy 因为它不会终止 我不能使用 strlcpy 因为它不可移植 只是几个问题 我怎样才能让我的函数正常运行 以确保它完全安全稳定 单元测试 这对于生产来
  • 用 C 实现 Unix shell:检查文件是否可执行

    我正在努力用 C 语言实现 Unix shell 目前正在处理相对路径的问题 特别是在输入命令时 现在 我每次都必须输入可执行文件的完整路径 而我宁愿简单地输入 ls 或 cat 我已经设法获取 PATH 环境变量 我的想法是在 字符处拆分
  • AccessViolationException 未处理

    我正在尝试使用史蒂夫 桑德森的博客文章 http blog stevensanderson com 2010 01 28 editing a variable length list aspnet mvc 2 style 为了在我的 ASP
  • 作为字符串的动态属性名称

    使用 DocumentDB 创建新文档时 我想设置属性名称动态地 目前我设置SomeProperty 像这样 await client CreateDocumentAsync dbs db colls x new SomeProperty
  • 已过时 - OpenCV 的错误模式

    我正在使用 OpenCV 1 进行一些图像处理 并且对 cvSetErrMode 函数 它是 CxCore 的一部分 感到困惑 OpenCV 具有三种错误模式 叶 调用错误处理程序后 程序终止 Parent 程序没有终止 但错误处理程序被调
  • 如何构建印度尼西亚电话号码正则表达式

    这些是一些印度尼西亚的电话号码 08xxxxxxxxx 至少包含 11 个字符长度 08xxxxxxxxxxx 始终以 08 开头 我发现这个很有用 Regex regex new Regex 08 0 9 0 9 0 9 0 9 0 9
  • ListDictionary 类是否有通用替代方案?

    我正在查看一些示例代码 其中他们使用了ListDictionary对象来存储少量数据 大约 5 10 个对象左右 但这个数字可能会随着时间的推移而改变 我使用此类的唯一问题是 与我所做的其他所有事情不同 它不是通用的 这意味着 如果我在这里
  • 如何将字符串“07:35”(HH:MM) 转换为 TimeSpan

    我想知道是否有办法将 24 小时时间格式的字符串转换为 TimeSpan 现在我有一种 旧时尚风格 string stringTime 07 35 string values stringTime Split TimeSpan ts new
  • 如何连接字符串和常量字符?

    我需要将 hello world 放入c中 我怎样才能做到这一点 string a hello const char b world const char C string a hello const char b world a b co

随机推荐

  • String.find 始终返回 true (C++)

    我试图让布尔型found word 在找到单词 字符时返回 true 如果没有找到则返回 false 但无论我在文本中写什么 它总是返回 true 循环本身有效 已经尝试过了 包括 IOStream 和字符串 while timestoru
  • 河内塔 - 用 Python 解决中途算法

    河内塔有可能中途解决吗 我已经做了广泛的研究来寻找可以半途解决用户配置的代码 但我还没有找到 这是一项作业 我需要代码从用户停止解决的地方接管并继续为用户解决它 而不将谜题重置为一 我知道有现成的递归算法 但这不是我正在寻找的 我正在寻找可
  • [if ( ! Defined( 'ABSPATH' ) )] 是什么意思

    我目前正在从头开始构建一个 WordPress 主题 作为 在工作中学习 的一种手段 尽管我过去非常依赖 PageBuilders 但我对后端工作有一定的经验 我现在希望创建一个没有任何页面构建器的主题 作为提高其加载速度等的方法 目前 我
  • C# 中重载函数调用运算符

    是否可以重载 C 中的默认函数运算符 运算符 如果是这样 怎么办 如果没有 是否有解决方法可以产生类似的效果 EDIT 我试图给一个类一个默认运算符 大致如下 class A A int myvalue save value public
  • 使用警报管理器与 ScheduledExecutorService 调度相同的任务有什么区别

    您好 我在互联网上读到 我们可以使用警报管理器安排我们想要以一定间隔运行的任何事情 并且ScheduledExecutorService 我想知道它们之间有什么区别以及什么时候使用 提前致谢 ScheduledExecutorService
  • git-mv 的目的是什么?

    据我了解 Git 并不真正需要跟踪file重命名 移动 复制操作 那么真正的目的是什么 的git mv https git scm com docs git mv 手册页没有特别描述性 它已经过时了吗 它是一个内部命令 不适合普通用户使用吗
  • NUnit TestCaseSource 将值传递给工厂

    我正在使用 NUnit 2 5 3 TestCaseSource 属性并创建一个工厂来生成我的测试 像这样的东西 Test TestCaseSource typeof TestCaseFactories VariableString pub
  • 方案/球拍过滤器/映射多个参数

    可以说我想做以下事情 define foo lst x filter function lst but function接受 2 个参数 并且function给了我 其中之一是清单lst它将使用 另一个是x 从语法上讲 我将如何更改该行以传
  • 在 UNIX shell 脚本中将十进制转换为十六进制

    在 UNIX shell 脚本中 我可以使用什么将十进制数转换为十六进制数 我以为 od 可以解决这个问题 但它没有意识到我正在向它提供数字的 ASCII 表示形式 打印 总的 目前可以使用 但是还有什么可用的呢 Tried printf
  • 如何从单词中删除字母 X?

    我需要从单词中删除字母 X 例如 我需要剪掉 Star Wars 中的第一个字母 munich 中的第四个字母 1 star wars 4 munich 5 casino royale 7 the fast and the furious
  • 使用 C++ FindContours 在视频图像中查找轮廓的问题

    我现在正在工作的程序是almost完成了 但我对结果不是很满意 通过使用 Canny 算法 我成功地获得了非常清晰的物体轮廓 但程序在识别轮廓并用红线绘制轮廓时存在一些问题 该程序 void setwindowSettings namedW
  • PHP - 检测 CSV 分隔符的最佳方法

    我已经看到了多个关于自动检测传入 CSV 分隔符的最佳解决方案的主题 其中大多数是长度在 20 30 行之间的函数 多个循环预先确定的分隔符列表 读取前 5 行并匹配计数等 这是 1 个例子 https stackoverflow com
  • Laravel:如何从目录中获取随机图像?

    我有一个包含子目录的目录 每个子目录中都有图像 我想随机显示图像 下面我的 php 代码运行良好 但在 Laravel 中不起作用 问题在于opendir and readdir 查看刀片 div div
  • 如何与盐师沟通

    我正在尝试从 salt minion 访问 salt master 但是 我无法获得 salt master 的密钥 在我的虚拟机上 我安装了salt master在我的 Windows 上 我安装了salt minion 我已经在我的mi
  • 如何在 Makefile 中定义规则以仅编译已修改的 *.cpp 文件(及其依赖项),而不是所有 *.cpp 文件

    假设我有文件 Libs 一 cpp 一 h 两个 cpp 两个 h 三 cpp 三 h Program 程序 cpp 有没有办法创建 Makefile 它只编译上次编译时修改的 cpp 目前我有类似的东西 SRCS one cpp two
  • 提取两个字符串之间的所有字符串

    我正在尝试开发一种方法来匹配两个字符串之间的所有字符串 我已经尝试过 但它只返回第一个匹配项 string ExtractString string s string start string end You should check fo
  • 使用原则 2 和存储库,服务层的目的是什么?

    我正在设计我的应用程序 并且正在使用 Doctrine 2 和 Zend Framework 目前 我已经编写了所有实体 我将开始编写存储库 我想到了服务 我想知道我的服务层是否不会重复存储库 当我使用 Doctrine 2 存储库时 是否
  • 混淆(表单属性)[重复]

    这个问题在这里已经有答案了 我对使用 form 属性感到困惑 Form From MDN 一个输入最多可以与一个表单关联 From W3S form属性指定一个或多个表单元素 属于 要引用多个表单 请使用 以空格分隔的表单 ID 列表 那么
  • Google Apps 脚本 - 如何替换文件?

    我正在尝试使用脚本替换 Google 云端硬盘文件夹中的 PDF 文件 由于GAS不提供添加修订 版本 的方法 我试图替换文件的内容 但我得到的只是一个空白的PDF 我无法使用 DriveApp File 类 因为我们的管理员已禁用新 AP
  • C#:根据平台访问 32 位/64 位 DLL

    我们使用 C 应用程序中自行编写的 32 位 C DLL 现在我们注意到 当 C 应用程序在 64 位系统上运行时 会自动使用 64 位运行时 当然无法从 64 位运行时访问 32 位 DLL 我的问题是 有没有办法使用32位DLL 如果不