使用托管代码中的非托管代码

2024-01-05

我的项目是用 MFC 开发的,它是未管理的代码。现在我需要通过重用大多数 MFC 类,在 C# 中创建类似的应用程序。

是否可以直接从 MFC dll 导出类/结构/枚举,以便我可以使用 dllimport 将其导入到我的 C# 中并使用它。


是的,这很有可能。您只需要小心类型即可。许多翻译得很好,但有些则很古怪。

您正在搜索的概念的名称是 COM 互操作。请参阅此处入门教程。 http://www.beansoftware.com/NET-Tutorials/COM-Interop.aspx当然,MFC DLL 必须支持 COM 才能从 .NET 访问。您需要使用支持的正确 COM 接口重建 MFC DLL。

这是一个MSDN COM 自动化概述 http://msdn.microsoft.com/en-us/library/dt80be78(VS.80).aspx包含示例项目的链接。

这是一个简单但切题的 CodeProject 示例 http://www.codeproject.com/KB/cs/interopBycchrism.aspx它准确演示了如何在 .NET 程序集中使用 COM DLL。

Great pinvoke 参考这里。 http://www.pinvoke.net/也用于访问本机 Win32 API。

编辑:另一个想法

如果您无法重建 MFC DLL(您没有源代码或正确版本的 IDE),您可以在 MFC 或原始 C/C++ 中创建 COM“包装器”DLL,它将导入标准中的 MFC DLL, pre-COM 方式,然后公开您需要的对象和方法。

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

使用托管代码中的非托管代码 的相关文章

  • C# 创建函数队列

    我写了一个名为 QueueManager 的类 class QueueManager Queue functionsQueue public bool IsEmpty get if functionsQueue Count 0 return
  • 是否允许将类模板类型参数键入相同的名称?

    这似乎可以在 MSVC 中按预期编译甚至工作 但它是合法的 C 代码吗 它是否能保证执行此处所期望的操作 即将模板类型导出到结构体的同名用户 template
  • C# 中四舍五入到偶数

    我没有看到 Math Round 的预期结果 return Math Round 99 96535789 2 MidpointRounding ToEven returning 99 97 据我了解 MidpointRounding ToE
  • 用户控件内所有控件均为空

    我有一个 UserControl 它使用 UserControl 以及其他控件 In the ascx文件我有以下代码
  • 如何在不实例化一个类的情况下检查它是否继承了另一个类? [复制]

    这个问题在这里已经有答案了 假设我有一个如下所示的类 class Derived some inheritance stuff here 我想在我的代码中检查类似的内容 Derived is SomeType 但看起来像is运算符需要 De
  • 如何在 Asp.net Gridview 列中添加复选框单击事件

    我在 asp 中有一个 gridview 其中我添加了第一列作为复选框列 现在我想选择此列并获取该行的 id 值 但我不知道该怎么做 这是我的 Aspx 代码
  • 单线程公寓问题

    从我的主窗体中 我调用以下命令来打开一个新窗体 MyForm sth new MyForm sth show 一切都很好 但是这个表单有一个组合框 当我将其 AutoCompleteMode 切换为建议和追加时 我在显示表单时遇到了这个异常
  • C# datagridview 列转入数组

    我正在用 C 构建一个程序 并在其中包含一个 datagridview 组件 datagridview 有固定数量的列 2 我想将其保存到两个单独的数组中 但行数确实发生了变化 我怎么能这样做呢 假设一个名为 dataGridView1 的
  • 操纵 setter 以避免 null

    通常我们有 public string code get set 如果最终有人将代码设置为 null 我需要避免空引用异常 我尝试这个想法 有什么帮助吗 public string code get set if code null cod
  • 无法加载文件或程序集“EntityFramework,版本=6.0.0.0”

    我究竟做错了什么 我该如何解决这个问题 我有一个包含多个项目的解决方案 它是一个 MVC NET 4 5 Web 应用程序 在调试模式下启动后调用其中一个项目时 出现此错误 导致此错误的项目具有以下参考 两个都是版本6 0 0 0 应用程序
  • 您可以在一个 Windows Azure 实例上部署多个 Web 应用程序吗?

    是否可以在一个 windows azure 小型计算实例中运行一堆 Web 应用程序 我正在考虑使用 Azure 作为放置一堆处于开发和非生产状态的项目 Web 应用程序 的地方 有些实际上已经被封存了 但我想在某个地方有一个活跃的实例 我
  • 格式化货币

    在下面的示例中 逗号是小数点分隔符 我有这个 125456 89 我想要这个 125 456 89 其他示例 23456789 89 gt 23 456 789 89 Thanks 看看这个例子 double value 12345 678
  • 以编程方式更新 ClickOnce 应用程序的部署清单会导致缺少 4.0 中所需的 <兼容框架> 元素

    我正在致力于自动化 NET 4 0 ClickOnce WPF 应用程序的安装程序 该应用程序需要在应用程序配置文件 我经历了寻找必须遵循的具体步骤的棘手过程Mage exe http msdn microsoft com en us li
  • 在简单注入器中注册具有多个构造函数和字符串依赖项的类型

    我正在尝试弄清楚如何使用 Simple Injector 我在项目中使用了它 注册简单服务及其组件没有任何问题 但是 当组件具有两个以上实现接口的构造函数时 我想使用依赖注入器 public DAL IDAL private Logger
  • .NET JIT 编译的代码缓存在哪里?

    NET 程序首先被编译为 MSIL 代码 当它被执行时 JIT编译器会将其编译为本机机器代码 我想知道 这些JIT编译的机器代码存储在哪里 它只存储在进程的地址空间中吗 但由于程序的第二次启动比第一次快得多 我认为即使在执行完成后 该本机代
  • 如何访问窗口?

    我正在尝试使用其句柄访问特定窗口 即System IntPtr value Getting the process of Visual Studio program var process Process GetProcessesByNam
  • 如何将对象转换为传递给函数的类型?

    这不会编译 但我想做的只是将对象转换为传递给函数的 t public void My Func Object input Type t t object ab TypeDescriptor GetConverter t ConvertFro
  • 使用 Chrome 和 Selenium 设置 LocalStorage

    我正在尝试使用 OpenQA Selenium 和 Chrome 设置本地存储键和值 我认为这相当微不足道 但我似乎无法让它发挥作用 我对 C 很陌生 所以我可能错过了一些东西 无论如何 我有这个功能 public static void
  • C# 粘贴到文本框时检查剪贴板中的字符

    有没有一些方法可以在粘贴到文本框 C 之前仅检查剪贴板中的字符 Ctrl V 和右键单击 gt 粘贴 但不使用 MaskedTextbox 在文本框文本更改中添加规则以仅接受数字 例如 private string value privat
  • 新的 .NET 6 控制台模板中的 C# 函数重载不起作用

    我在尝试重载该函数时遇到错误Print object in the 新的 NET 6 C 控制台应用程序模板 https learn microsoft com en us dotnet core tutorials top level t

随机推荐

  • 如何返回源 bash 脚本?

    我在 bash 脚本中使用 source 如下所示 bin bash source someneatscriptthatendsprematurely sh 我想退出 someneatscriptthatendsprematurely sh
  • 在 Rust 中将二进制字符串转换为带有前导零的十六进制字符串

    编者注 此代码示例来自 Rust 1 0 之前的版本 在语法上不是有效的 Rust 1 0 代码 此代码的更新版本会产生不同的错误 但答案仍然包含有价值的信息 当然有比这更好的方法将二进制字符串转换为十六进制字符串吗 use std num
  • 如何在客户端使用Meteor.wrapAsync?

    在我的 Meteor 客户端代码中 我尝试使用仅具有异步调用的第三方 API 如何在客户端上使用 Meteor wrapAsync 以同步方式调用此 API 该文档似乎表明这是可能的 http docs meteor com full me
  • python pandas“无法设置具有不匹配列的行”错误

    我在向数据集中添加新行时遇到问题 这是例子DataFrame column names A B C items a1 b1 c1 a2 b2 newDF pd DataFrame items columns column names pri
  • Rails 3 + devise:如何使电子邮件确认链接使用安全 https(而不是 http)

    如何告诉 Devise 对所有帐户确认和密码提醒等链接使用 https 而不是 http 注意 我不是在寻找重定向的解决方案allhttp 到 https 我只需要设计以确保它创建的链接使用 https 我们的 Rails 3 应用程序使用
  • jQuery 的页面重新加载功能不起作用[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 不重新加载页面的 jQuery 代码 document ready function submit click func
  • 如何更改 Shopify 主题名称

    有谁知道如何更改 Shopify 主题的名称 我似乎找不到该文件 我尝试使用 Wingrep 搜索并查找主题名称 但没有得到任何结果 找到了 主题选项中显示的主题名称由主题文件夹的名称定义 因此 如果您想为主题指定自定义名称 请在将主题上传
  • 使用 RabbitMQ 通过 Spring Cloud Stream 为消费者提供多个绑定路由密钥

    我想在 Spring Cloud Stream 中配置一个输入通道 以将其绑定到具有多个路由键的同一交换 目的地 我已经设法使用单个路由键来实现此功能 如下所示 spring cloud stream rabbit bindings inp
  • 注意:未定义的偏移量:嵌套数组上的 0

    我正在尝试创建一个if statement using isset当数组内没有任何内容时进行过滤 该数组大致包含 0 16 个变量 有时为 11 有时什么也不包含 当我回响 echo car Images 0 ImageURI 如果 JSO
  • 如何在 React Router v6 路由中添加导航栏和侧边栏? [复制]

    这个问题在这里已经有答案了 我正在构建一个 React 应用程序并使用 React Router V6 进行路由 在应用程序中 我在顶部有一个导航栏 在应用程序的左侧有一个侧边栏 使用侧边栏 我在应用程序中渲染不同的页面 在 screens
  • 用于替换 Windows 在文件名中不接受的字符的正则表达式

    我正在尝试构建一个正则表达式 它将检测 Windows 不接受作为文件名一部分的任何字符 这些字符对于其他操作系统是否相同 说实话 我不知道 这些符号是 无论如何 这就是我所拥有的 lt gt 测试仪结束于http gskinner com
  • UINavigationBar setBackgroundImage:forBarMetrics:不工作

    我刚刚切换到 iOS 5 除了自定义导航栏之外 我的应用程序中的所有内容似乎都正常运行 我环顾四周 遵循每个人的建议 调用新方法 setBackgroundImage forBarMetrics 但它似乎不起作用 这是我尝试放置在应用程序委
  • Visual Studio 2010 SP1 和 .NET Framework 的更改

    Visual Studio SP1 是否安装 NET Framework 的任何更新 例如 NET 4 SP1 我问这个问题是因为我假设如果是这种情况 我需要确保服务器在下次部署之前安装了匹配版本的框架 它是否正确 这是链接msdn 文章
  • Spring Boot - 将 /health 端点的位置更改为 /ping/me

    我设置了endpoints health path财产给 ping me 但我无法使用访问端点http localhost 9000 ping me http localhost 9000 ping me它仅适用于http localhos
  • VB.Net中的主要函数在哪里

    我已经接管了 VB Net WinForms 应用程序的支持 我其实是一名c 开发人员 比较熟悉c 项目中Visual Studio项目的设置 现在我试图确定为什么我的应用程序在特定的 XP 安装上崩溃 我在这里阅读了建议 http soc
  • Layer 与 Quickblox baas 比较

    Layer 与 Quickblox 哪个更好 更容易实现 性能特点 用于消息 VoIP 和视频聊天 我是否需要将 parse com 添加到这些消息传递解决方案中以进行内容存储 一些区别点是 Quickblox 支持视频和音频通话 而 La
  • Info.plist 格式不正确

    我正在顺利地完成我的 iOS Xcode 项目 然后突然当我尝试运行它时 我开始收到以下错误 error couldn t parse contents of Users pavitarsidhu Desktop AmigoDash Sid
  • 如何在tensorflow中实现t-SNE?

    我正在尝试在张量流中实现 t SNE 可视化以执行图像分类任务 我主要在网上找到的都已经在Pytorch中实现了 看here https learnopencv com t sne for feature visualization 这是我
  • 如何在perl cgi中制作二维码

    我正在尝试创建一个网站 其中包含供人们填写的表单 当用户按下 提交 按钮时 每个表单字段中的文本将连接成一个文本字符串 用于制作二维码 我该如何做到这一点以及哪种语言最适合大多数浏览器兼容 此外 我希望文本字段有一个与之关联的新行 n 以使
  • 使用托管代码中的非托管代码

    我的项目是用 MFC 开发的 它是未管理的代码 现在我需要通过重用大多数 MFC 类 在 C 中创建类似的应用程序 是否可以直接从 MFC dll 导出类 结构 枚举 以便我可以使用 dllimport 将其导入到我的 C 中并使用它 是的