c# - C api 到 C# GUI

标签 c# c project

我有一个字节流,我将其分类为结构。现在我需要使用这些结构中的值更新 C# GUI。现在,我已经使用 Google 找到了有关 pinvoke 和 dllimport 的信息,但一切都是从 C# 调用 C 代码,我需要做相反的事情。

C# 代码具有旋转拨号/更新值的函数,所以一旦我获得了我需要的值,我只想调用这些函数,将这些值作为参数,我的 C 代码已全部编写,GUI 已全部编码,并且使用我用鼠标拖动的转盘功能,我只需要将它们粘在一起。

感谢您的帮助!

最佳答案

一般来说,您不能从 C 代码调用 C# 代码。 (您可以从 C 代码返回到 C# 代码,但 C# 端需要启动该过程并传入回调。)

“正确的方法”是 C# 代码调用 C 代码并提供回调函数(查找 UnmanagedFunctionPointer 属性以了解如何将托管委托(delegate)转换为函数指针。)

如果该选项不可行,您有几个替代方案,但没有一个方案会像“将东西粘在一起”那样简单:

  • 使用混合模式 C++ 库连接 C 和 C# 代码。这是一团糟,IMO,我只是建议这样做,因为它对您的 C 代码的更改量最少。
  • 从您的 C# 代码中公开一个 COM 对象并与 C 中的对象进行通信。比选项 A 稍微不那么困惑,但代价是将 COM 引入组合中。
  • 使用某种形式的进程间通信(TCP 套接字、命名管道等)并在两个代码元素之间进行通信,就好像它们是独立的程序一样。

关于c# - C api 到 C# GUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9271863/

相关文章:

c# - 使用指令与完整路径名

c# - 我应该选择哪种加密哈希函数?

c - 如何通过函数设置指针?

创建时 Gitlab 中的项目模板

c# - 这是在具有服务/存储库层的 MVC 中异步/等待的正确用法吗?

c - 将结构中的矩阵成员乘以 float

c - cuda 上的 vector 加法未计算某些元素

android adt 17 - 将 jar 添加到项目 - dexedlibs 中的 jar/仅包含 list

android - 无法将库添加到 Eclipse 中的 Android 项目

c# - 每个 Asp.net 回发中的 JQuery BlockUI 进度指示器