簡體   English   中英

從C#應用程序或端口調用C ++代碼嗎?

[英]Call C++ code from a C# application or port it?

我最近一直在努力解決一個在C#中實施得很糟糕的算法 (即開發人員被拉到另一個項目而未能充分記錄他所做的事情)。

我找到了一個替代方案(來自數字配方),但它是用C ++編寫的。 因此,我認為最安全的方法是將C ++包裝在DLL中。

請記住,在C#方面我仍然有點綠,並且從未嘗試過從頭開始創建DLL,這聽起來像是一種合理的方法(如果是這樣,有人試過這個/得到任何建議)嗎? 或者我應該全力以赴並嘗試將C ++例程移植到C#中?

編輯 - 我不是在尋找任何人為我做出決定,但如果有人對任何一條路線有任何表現,我都會有興趣聽到他們的意見和應該避免的任何令人討厭的陷阱。 例如,將C#中的數據列表傳遞給C ++ STL向量有多討厭?

我嘗試從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();

    }
}

如果C#版Mitch引用不適用於您的目的,您可以使用托管C ++包裝器,它可以重用,並包裝您擁有的C代碼,但仍然可以作為本機.Net顯示您的托管應用程序。部件。 我過去曾使用過這種方法來使用沒有自己的原生.Net API的庫的C API,並發現兩者之間的編組數據相對無痛。

這取決於你的目標。

如果要有一個有效的應用程序,我會權衡兩種方法的成本和收益,並以最具成本效益的方式進行。

如果要改進你的C#那么一定要重寫C.

...或者你可以從這里下載已經實現的C#代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM