c# - 从 C DLL 到 .NET 的接口(interface)

标签 c# .net dll unmanaged

我有一个用 C 编写的遗留 DLL,我想从 C# .NET 应用程序调用它。问题是 C DLL 的 DLL 接口(interface)相当复杂。它是这样的:

__declspec(dllexport) void __stdcall ProcessChunk(
    void *p_prochdl,
    const BIG_INPUT_STRC *p_inparams,
    BIG_OUTPUT_STRC *p_outparams
);

BIG_INPUT_STRC/BIG_OUTPUT_STRC 包含各种各样的东西……指向缓冲区数组的指针、枚举参数、整数参数等。简而言之,它们很复杂。

第一个问题:是否有一种简单的方法可以将DLL头文件中包含的所有结构信息都获取到C#类中,或者您是否需要将所有内容复制并粘贴到C#中并重新定义它?这似乎是多余的。

与此相关,从 C# 将结构传递到非托管 DLL 的正确方法是什么?

最后,是否有示例说明如何将缓冲区数组从 C# 正确传递到非托管 DLL?或者,如何将二维数组传递到 DLL 中?

谢谢, -格雷格

最佳答案

在 C# 中使用 P/Invoke 来完成这种软操作非常简单。

我相信您将不得不在 C# 中手动定义数据结构。

我建议您看看这个 MSDN article关于这个问题

关于c# - 从 C DLL 到 .NET 的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/494376/

相关文章:

dll - CMake fix_bundle 如何忽略嵌入式 dll

c# - 语法高亮部分适用于 C# 的 VS 代码

c# - 使用 window.external 将 javascript Date 对象传递给 C# WebBrowser 控件

c# - 引用自定义组件的设计时程序集

c# - 从 mvc Controller 使用 Web api Controller 操作

c# - 如何检查 DateTime 是否发生在今天?

c++ - 如果一个类没有完全实现,我可以强制共享 C++ 库无法构建吗?

c# - 如何在 javascript 中转义内联 c# 脚本中的双引号?

c# - 依赖属性和自定义文本框的问题

c++ - MSVCP140.dll 是否依赖于操作系统/版本?