2012-02-14 89 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套接字,命名管道等)并在两个代码元素之间进行通信,就好像它们是单独的程序一样。