通过 P/Invoke 将 MFC CArray 编组到 C#

发布于 2024-11-17 21:29:13 字数 211 浏览 1 评论 0原文

我正在尝试编写一个 C# 类 (2010),它允许使用旧版 C++ dll 中包含的函数。这些函数使用 __stdcall 导出,并具有不同的参数集。我在处理字符串和其他基元时没有任何问题,并且能够毫无问题地调用这些函数。

问题是一些函数包含 CArray 和 CArray 。引用作为参数。我不知道如何封送此数据类型,或者是否可能。

遗憾的是,我无法更改旧版 DLL 代码。

I am attempting to write a C# class (2010) that allows the usage of functions contained in a legacy C++ dll. The functions are exported using __stdcall, and have varying sets of parameters. I have no issue dealing with strings and other primatives, and am able to invoke these functions without issue.

The problem is that a few of the functions contain a CArray & reference as a parameter. I cannot figure out how to marshal this datatype, or if it's even possible.

I can't change the legacy DLL code, unfortunately.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

Spring初心 2024-11-24 21:29:13

为了正确处理这个问题,您可以创建一个包装 DLL(使用与您想要调用的相同的 MFC/C++ 运行时版本,并确保接受相同的数组,例如指向本机 C++ 的传统指针) 尝试使用更新的 MFC 版本(并使用 C++/CLI进行

您可以

编组),但新的 CArray 可能与二进制不兼容。遗产图书馆期望。

To deal with this correctly, you can make a wrapper DLL (using the same MFC/C++ runtime version as what you want to call into, and make sure accepts the same array in the form of, say, a traditional pointer to a native C++ array.

This wrapper DLL can be called into from C#.

You could try with a more recent MFC version (and use C++/CLI for the marshalling), but then the new CArray could be binary incompatible with what to legacy library expects.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文