使用 CString 进行 PInvoke

2023-12-21

我正在尝试使用 P/Invoke 从 C# 调用非托管 C++ DLL 中的函数。 C++ DLL 使用CString'作为函数参数和返回值,例如

CString AFX_EXT_API GetUserName(CString& userID)

不幸的是,C++ 是遗留代码,我无法更改它以使用更通用的代码LPSTR(甚至char *).

有没有办法将 CString 编组为 .NET 兼容对象?或者以某种方式装饰 .NETchar[]编组到 CString?


你不能创建一个CString在托管代码中。显然,您需要在托管代码和本机代码之间添加一个额外的层。

这使您有机会制作位于两者之间的 C++/CLI DLL。您可以从托管程序集中调用此代码,而无需 P/invoke。从 C++/CLI 中间层您可以创建一个CString.

不过,有一点需要注意。您必须使用与本机 DLL 相同的 C++ 运行时。这也许是可能的,但很可能会成为绊脚石。例如,如果 DLL 是使用 MSVC6 编写的,那么您也需要使用 MSVC6 构建中间层,这就排除了 C++/CLI。返回 P/invoke 并char*在这种情况下。

我要强调的是,导出基于 DLL 的接口是很糟糕的做法CString我正在寻找 DLL 的替代品。

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

使用 CString 进行 PInvoke 的相关文章

  • DLLImport C++ 函数,以 char* 作为输入或输出参数

    我有两个想要 DllImport 的 C 函数 bool SendString const char pSendStr long strSize bool ReadString char pReadStr long readStrSize
  • 将 std::vector 转换为 .NET List 的最有效方法是什么?

    将 std vector 转换为 NET 列表的最有效方法是什么 为了提供一些背景信息 我使用 C CLI 包装了一个非托管 C 类 C CLI 类保存一个指向 C 类的指针 并且我为每个公共方法都有一个包装器 一种方法返回 std vec
  • 自动创建 Visual C++ 故障转储

    有没有办法在应用程序崩溃时 在 Windows 操作系统上 自动创建故障转储文件 就像我可以使用附加的 Visual Studio 调试器进行保存一样 也就是说 我希望能够使用自动创建的故障转储文件在 Visual Studio 中调试我的
  • Direct2D:将 ID2D1Image 转换为 ID2D1Bitmap

    我正在开发一个需要修改屏幕上已有内容的程序 所以我只有一个ID2D1Bitmap我使用创建的pRenderTarget gt CopyFromRenderTarget 我想做的是将效果应用于该位图 效果仅返回ID2D1Image 但我需要有
  • 如何在 Microsoft Visual Studio 2017 中检查 C++ 版本

    我正在尝试使用以下代码检查我拥有的 C 版本 if cplusplus 201703L std cout lt lt C 17 n else if cplusplus 201402L std cout lt lt C 14 n else i
  • 利用 SSE 和其他 CPU 扩展

    在我的代码库中有几个地方 对于大型数据集 相同的操作会重复很多次 在某些情况下 处理这些需要花费相当长的时间 我相信使用SSE来实现这些循环应该可以显着提高它们的性能 特别是在对同一组数据执行许多操作的情况下 因此一旦数据最初被读入缓存 就
  • 为什么(错误地)使用 ref myarray[0] 传递数组可以工作,但仅在 32 位应用程序中有效?

    我在一些互操作中做了一些愚蠢的事情 使用DllImport 在某一时刻 但它仍然可以在 32 位机器上运行 在 64 位应用程序上做了哪些不同的操作 以及为什么 导致方法 1 的行为不同 方法一 错误的方法 ref byte param S
  • C++ 检查 unicode 字符是否为全角

    如何检查unicode字符是否是全角 我使用Win32 MFC 例如 中是全宽 A不是全角 是全宽 F不是全宽 你需要的是检索东亚宽度 http www unicode org reports tr11 的角色 您可以通过解析来做到这一点东
  • C++ 更改屏幕方向问题 -- DEVMODE dmDisplayOrientation DMDO_90 undefined

    我似乎无法编译一些 C 代码 我正在翻转显示器的方向 但 VS2008 告诉我 DMDO 90 和 DMDO 270 无法识别 error C2065 DMDO 90 undeclared identifier error C2065 DM
  • 何时引发 Window.SourceInitialized 事件

    我能保证Window SourceInitialized事件总是会在Window Loaded事件 我需要HwndSource在我的中进一步处理的对象Window Loaded 事件处理程序我不确定到那时这是否总是可用 以下是您可以预期的事
  • 如何在 Visual C++ 中宣传 Bonjour 服务

    我试图弄清楚这是否可能 但是通过 Visual C 宣传 Bonjour 服务的最简单方法是什么 您可以使用DNS服务发现客户 dns sd Windows Bonjour 安装程序把它放进去C Windows system32 dns s
  • 创建具有特定权限的线程C++

    我有一个多线程应用程序 我想创建一个具有不同用户权限的线程 例如 多域管理员权限 但我找不到任何 Win32 APICreateThread要做到这一点 如何创建具有特定用户权限的线程 thanks 调用 CreateThread CREA
  • Boost + Visual Studio 2010 + Windows 平台 SDK 7.1

    有人可以告诉我 bjam 的命令行开关或其他可以使用新的 Windows Platform SDK 7 1 工具链使用 VS2010 进行 boost 编译的东西吗 您可以在普通的视觉工作室项目中设置该选项 默认值是 v100 是平台 7
  • C# 如何使用 CallNtPowerInformation 和 Interop 来获取 SYSTEM_POWER_INFORMATION

    我正在尝试编写一个小程序 该程序作为服务运行并监视用户是否处于活动状态 如果用户空闲 没有鼠标 键盘 一个小时 则某些进程将被终止 如果用户使用 user32 dll 中的 LASTINPUTINFO 运行它 它就可以工作 但它不能作为服务
  • 我应该选择哪个 VC++ 运行时版本 - 静态还是动态?

    我正在开发一个 64 位进程内 VC ATL COM 服务器 它基本上只是将所有调用重定向到进程外 COM 服务器 所以我的COM服务器基本上什么都不做 最初它在 DLL 中使用 C 运行时 MD编译器开关 我注意到当我在干净的 64 位
  • VB - 以隐式方式链接 DLL

    我正在开发 VB6 图形界面 并且需要隐式链接到 DLL 这样做的动机来自于我上一个问题 https stackoverflow com questions 5194573 有问题的 DLL 使用静态 TLS declspec thread
  • 赋值运算符“=”是原子的吗?

    我正在使用全局变量实现线程间通信 global var volatile bool is true true thread 1 void thread 1 while 1 int rint rand 10 if is true cout l
  • 照片马赛克算法。如何在给定基本图像和瓷砖列表的情况下创建马赛克照片?

    Hy 我要做的是创建一个程序 使用 C 或 C 它将 24 位 像素位图和图像集合作为输入 我必须创建一个马赛克图像 类似于使用库的输入图像给定的图像 创建与输入类似的马赛克照片 到目前为止 我可以访问输入的图像像素及其颜色 但我有点卡住了
  • p 调用非托管 DLL 时获取标准输出?

    我有一个非托管 DLL 它将日志消息写入标准输出 我正在使用 WPF 应用程序中的 P 调用来调用此 DLL 并且我需要获取标准输出流日志 我尝试过 Console SetOut 但似乎只能捕获使用 Console Write 等写入的信息
  • 在 NaN 情况下 to_string() 可以返回什么

    我使用 VS 2012 遇到了非常令人恼火的行为 有时我的浮点数是 NaN auto dbgHelp std to string myFloat dbgHelp最终包含5008角色 你不能发明这个东西 其中大部分为0 最终结果是 0 INF

随机推荐

  • build.sbt 定义模块之间的项目依赖关系

    我在 PlayFramework 中有项目 它有一个主要项目 没有任何代码 逻辑 它有几个子模块 main admin common shop 模块 管理和商店将基于通用模块 例如 用户 角色 权限等类 所以我必须这样配置它 lazy va
  • 无法形成对 NSTextView 类实例的弱引用

    仅使用 Swift 这是我在 AppDelegate swift 中的代码 import Cocoa class AppDelegate NSObject NSApplicationDelegate IBOutlet var window
  • WPF 中的 DataTemplate 和 DataContext 有什么区别?

    我可以通过以下方式设置视图模型和视图之间的关系DataContext syntax
  • SwiftUI 点击手势选择错误的项目

    所以我正在尝试创建一个自定义图像选择器 类似于 Instagram 但更基本 这就是我使用它创建屏幕的方法 struct NewPostScreen View StateObject var manager SelectNewPostScr
  • 如何在 ion-checkbox 中使用 ngModel?

    我正在尝试与 ngModel 一起使用 但 ngModel 在那里不起作用 我的代码
  • Java中的AVL树旋转

    我想实现Java AVL树并左右旋转树 我不明白这个 任何人都可以通过查看下面的代码告诉我如何左右旋转树 然后使用 fix up 与这两个函数来平衡 AVL 树 我希望这里有人可以指导我完成这个任务 import java util Ran
  • 是否自定义会员资格

    我正在 ASP NET MVC3 中创建网站 足球 足球 我希望拥有用户 具有默认会员资格的用户的附加信息 这些是普通访问者 和玩家 我认为最好他们继承用户并拥有一些附加信息如衣号 玩家还可以发布文章 用户可以只评论文章 做到这一点的最佳方
  • 过滤堆叠元素的多个放置处理程序中断

    我有一些 div 设置为 droppable 的元素可以接收从图库中拖放到其上的缩略图 img 元素也被设置为接受这些缩略图 因此我可以在图像之上添加图像 放置处理程序从缩略图中恢复图像并将其附加到正文中 当多个 div 和 imgs 堆叠
  • MUI 自动完成(多个)控制值 - 神秘的输入行为

    我正在尝试编写代码以在键盘输入时异步搜索多选组合 然而我在最新版本 5 2 2 中发现了一个我无法解释的奇怪行为 我提炼出以下问题 基于 MUI 自动完成页面的示例 import as React from react import Tex
  • 与父实体一起逐出依赖集合

    我刚刚意识到 当一个对象从 Hibernate 缓存中被逐出时 依赖集合 如果被缓存 必须被驱逐分别地 http jaitechwriteups blogspot com 2006 08 evict collection from hibe
  • 如何使用 c#.net 读取 XML 中的 XML 节点

    我有一个如下所示的 XML 文件
  • Vaadin Valo 页面不会滚动

    我正在基于原生 Valo 主题创建一个新的 Vaadin 主题 升级到 Vaadin 7 3 Valo 由其他人完成 后 页面内容将不再滚动 除了整个页面本身之外 页面上应用了溢出属性的所有其他元素都可以正常工作 我知道我可以应用这个 v
  • Netlogo的执行顺序是怎样的?

    请问我这句话正确吗 如果我写 ask turtles go forward go backward 随机一只乌龟向前移动然后向后移动 然后第二只随机乌龟会做同样的事情 依此类推 这是否正确 相对于 ask turtles go forwar
  • 如何在 Firefox 中使用 php curl 发送推送消息

    我已经为 Chrome 实现了推送通知 当我需要向 GCM 发送推送消息时 我使用了以下 PHP 函数 function send push message subscription ids Set GCM endpoint url htt
  • C# .NET 支持 IDispatch 后期绑定吗?

    问题 我的问题是 C 本身支持后期绑定 IDispatch 吗 Pretend我正在尝试自动化 Office 同时与客户安装的任何版本兼容 在 NET 世界中 如果您在安装了 Office 2000 的情况下进行开发 则从现在到世界末日 每
  • 如何在 Gradle 构建中使用为 jar 文件提供的范围?

    我需要在我的应用程序中使用 Amazon Maps 和 Amazon Messaging 使用 gradle 我没有成功添加具有 提供 范围的 Amazon 依赖项正如他们需要的那样 https developer amazon com s
  • Swift 与泛型类型的条件一致性

    我正在尝试使用两种通用类型来使用 Swift 扩展 我试着举个例子 我们有一个盒子 可以容纳不同类型的物品 class Box
  • 求和间隔

    我必须对这样的间隔进行求和 1 6 2 4 The result is 1 6 so there are 6 numbers in the end 这是另一个例子 4 6 8 10 14 16 4 5 6 8 9 10 14 15 16 t
  • Docker 最佳实践:容器的单一进程

    码头工人最佳实践 https docs docker com engine articles dockerfile best practices 指南指出 您应该只在单个容器中运行单个进程 Nginx 和 PHP FPM 应该在单独的容器中
  • 使用 CString 进行 PInvoke

    我正在尝试使用 P Invoke 从 C 调用非托管 C DLL 中的函数 C DLL 使用CString 作为函数参数和返回值 例如 CString AFX EXT API GetUserName CString userID 不幸的是