5

我最近一直在努力解决在 C# 中实现不佳的算法(即开发人员被拖到另一个项目中并且未能充分记录他所做的事情)。

我找到了一个替代方案(来自数字配方),它可以工作但用 C++ 编写。所以我想可能最安全的方法是将 C++ 包装在一个 DLL 中。

请记住,当涉及到 C# 时我仍然有点绿色并且从未尝试过从头开始制作 DLL,这听起来像一个合理的方法(如果是这样,有没有人尝试过这个/得到任何建议)?还是我应该全力以赴,尝试将 C++ 例程移植到 C# 中?

编辑- 我不是在寻找任何人为我做出决定,但如果有人对任何一条路线有任何经验,我很想听听他们的意见以及应该避免的任何令人讨厌的陷阱。例如,将数据列表从 C# 传递到 C++ STL 向量有多讨厌?

4

4 回答 4

3

我尝试从 c# 代码链接到 c-dll,结果非常好,即使我在环境之间发送数据时遇到了一些问题。否则,该过程非常简单。您来回发送的数据(数量和频率)越多,程序运行的速度就越慢,但您可能已经自己弄清楚了这一点。

主要缺点是每次发生变化或有人发现错误时,都要维护 c#-c 胶水代码(接口代码)。

这里有一些代码可以帮助您入门:

using System.Runtime.InteropServices;
    class myDllCaller {

       //call to function in the dll returning an int
      [DllImport("MyFavorite.dll")]
      private static extern int dllFunction(//list of parameters to function);

    public static void Main() {
    int rerult = dllFunction();

    }
}
于 2009-05-08T08:46:20.163 回答
2

如果 C# 版本 Mitch 引用的许可证不适合您的目的,您可以使用托管 C++ 包装器,它可以重用和包装您拥有的 C 代码,但您的托管应用程序仍然可以作为本机 .Net 看到部件。我过去曾使用这种方法来使用没有自己的本机 .Net API 的库的 C API,并发现它在两者之间编组数据相对轻松。

于 2009-05-08T08:43:58.780 回答
1

这取决于你的目标是什么。

如果要拥有一个有效的应用程序,我会权衡这两种方法的成本和收益,并选择最具成本效益的方法。

如果是为了改进你的 C#,那么一定要重写 C。

于 2009-05-08T08:36:47.393 回答
0

...或者您可以从这里下载已经用 C# 实现的代码。

于 2009-05-08T08:38:43.397 回答