我有一些权威的 ANSI 标准 C 代码。这意味着虽然我有源代码,但我不能翻译成另一种语言,也不能修改调用参数,因为这些操作会使权限失效。有超过 150 种功能。
我可以进行附带更改,例如将文件名从 .C 更改为 .CPP,以便使用 Visual Studio 2009 的 C++ 编译器进行编译,我已经这样做了。也可以添加编译器指令等。如有必要,我还可以通过包装层。
另一个限制是我的公司不希望我在任何 C# 代码中使用不安全的关键字。
我需要从 C# 程序中获取这些功能。
典型的 C/C++ 函数如下所示:
double SomeFunction(double a, double[3] vec, double[3][3] mat);
数组内容有时输入,有时输出,很少同时输入。
我首先尝试制作一个非托管 DLL(带有标记为 Extern C 的函数)。只有简单参数(int、double)的函数运行良好,但我无法确定如何编组数组。(其实我确实找到了一些示例代码,但是复制150次是极其复杂和不合理的。)
然后我在同一个解决方案中尝试了两个项目,一个在 C++ 中,另一个在 C# 中。在 C++ 项目中,我创建了一个托管函数,它只调用了标记为非托管的原始函数。这是非常干净和简单的,同样,简单的参数也很好用。但是对于数组,我找不到如何使参数类型在 C# 到 C++ 边界上匹配:(
Argument '2': cannot convert from 'double[]' to 'double*'
如上所述,我不能使用 unsafe 来获取指针)。
当然,我正在尝试做的事情必须是可能的。
获得这些功能的最佳方法是什么?
(使用上述函数的示例代码真的很酷。)