2012-02-14 84 views
1

我有一個字節流,我排序到結構。現在我需要使用這些結構中的值更新C#GUI。現在我已經發現了有關使用谷歌的pinvoke和dllimport的一些東西,但是一切都從c#調用c代碼,我需要做相反的事情。C#到C#GUI

c#代碼具有旋轉撥號/更新值的函數,所以一旦我有我需要的值,我想調用這些函數,將這些值作爲參數,我的c代碼全部寫入,gui全部編碼和功能使用撥號,我用我的鼠標拖動,我只需要將這些粘在一起。

感謝您的幫助!

+1

你需要調用的所有函數都在dll中(而不是exe),對吧?我認爲你可以從C引用該DLL,所以我不確定你的問題是什麼......雖然看起來你可能想利用事件。當你說「C代碼」是你在談論Visual C++還是你實際上在談論一個C編譯器? – 2012-02-14 04:56:38

+0

我得到的印象是,在提出這個問題之前你沒有嘗試搜索功能:[可能從C#調用C++代碼?](http://stackoverflow.com/questions/935664/possible-to-call-c-代碼從C),[從C++調用C#代碼](http://stackoverflow.com/questions/778590/calling-c-sharp-code-from-c),[如何從C代碼調用C#代碼? ](http://stackoverflow.com/questions/9056048/how-to-call-c-sharp-code-from-c-code),[通過Interop/pinvoke傳遞C#回調函數](http:// stackoverflow .com/questions/7970128/passing-ac-sharp-callback-function-through-interop-pinvoke)等等。 – 2012-02-14 04:57:42

+0

@cody哈哈,我的印象是你沒看完我的整篇文章。 everyone:即時只使用c和c# – 2012-02-14 05:01:19

回答

0

如何使用PInvoke從C#調用C代碼,使C代碼返回一些數據,然後讓C#應用程序使用該數據更新GUI?有什麼理由不能讓C#代碼只是「負責」,僅在需要時調用C代碼,否則只是接管UI線程?爲什麼你想讓你的C代碼能夠更新GUI?

+0

我可以做到這一點,但我覺得這很慢,每半秒調查一次,甚至可能會更少。已經有一些滯後,gui真的和主界面沒有任何關係,只是旋轉圖像的數學。 – 2012-02-14 04:54:50

+0

這是一個遙測系統btw。 AHRS的實時數據流,用飛機駕駛艙內的一些儀器更新c#gui。 – 2012-02-14 04:57:16

2

一般來說,你不能從C代碼調用C#代碼。 (您可以將退回從C代碼轉換爲C#代碼,但C#端需要啓動該進程並傳入回調。)

「正確的方法」是讓C#代碼調用C代碼並提供回調函數(查找UnmanagedFunctionPointer屬性以瞭解如何將託管代理轉換爲函數指針)。

如果該選項不可行,那麼您有幾個選擇,但它們都不會是那麼容易,因爲只是「粘合在一起的東西」:

  • 使用混合模式的C++庫來彌補C和C#代碼。這是一個混亂,國際海事組織,我只建議它,因爲它對你的C代碼的變化最少。
  • 從C#代碼中暴露出一個COM對象,並與來自C的代碼進行通信。與選項A相比稍微雜亂,但以將COM引入組合中爲代價。
  • 使用某種形式的進程間通信(TCP套接字,命名管道等)並在兩個代碼元素之間進行通信,就好像它們是單獨的程序一樣。