调用 DLL,然后调用 API

Posted

技术标签:

【中文标题】调用 DLL,然后调用 API【英文标题】:Calling to a DLL which then calls back to an API 【发布时间】:2016-12-12 05:06:56 【问题描述】:

我正在编写一个机器人模拟场景。机器人使用 C 语言编程并使用对特殊 API 的调用。

我的计划是将机器人程序编译为 DLL,并在模拟开始时调用该 DLL 的主函数来启动它。

我遇到的问题是 DLL 将如何返回通信。我将在伪代码中给出一个例子

假设机器人程序只是“SetLeftWheelSpeed(100)”然后“Wait(1500)”让它移动左轮,然后等待 1.5 秒。

当我调用机器人的程序时,如何让 SetLeftWheelSpeed(int speed) 与我的模拟器进行通信?我认为 DLL 是你调用方法的工具库,它会给你一个回报。我必须让它循环运行,所以我不能只使用我不认为的返回值。

编辑:

更多的想法使我遇到了一个根本问题。在我给定的示例中,我将无法编译机器人代码,因为它没有诸如移动***之类的定义。为此,我必须将其链接到模拟器中的 API。所以也许我必须将 API 链接到机器人代码,将机器人代码链接到模拟器,并以某种方式将模拟器链接到 API,以便它实现它应该做的事情。

【问题讨论】:

@pseudoadbul:DLL 将数据推送到 C# 的方法有很多,其中最直接的一种可能是将消息写入 C# 代码正在使用流读取的管道中。这完全取决于 C# 代码是负责设置返回给机器人驱动程序的值,还是只是在观看。 谢谢,我会调查的。但是,是的,沟通必须是双向的。 你知道如何使用 c# 委托吗?当通过 p/invoke 传递时,它们成为函数指针,允许本机代码对 c# 代码进行回调。请注意,本机代码的回调对垃圾收集器是隐藏的,因此您必须防止委托变得无法访问。 我经常使用委托,但所有这些垃圾收集器的东西都让我感到害怕。我可能会考虑在两者之间建立一个数据流。 OK 新计划。您有 3 个不同的部分:模拟器(Windows 可执行文件)、机器人代码(一个 dll)和 API(也是一个 dll) 机器人代码链接到 API,因此它可以调用 API 函数。模拟器还有一个指向 API dll 的链接,因此它可以向 API 函数添加委托。这会是一个更好的策略吗? 【参考方案1】:

是的,有可能。

请通过Code Project 阅读本教程,这对您有帮助。

另外,我认为它与How to call C++ DLL in C# 或Is it possible to call a C function from C#.Net 重复

【讨论】:

谢谢,但我已经阅读了所有这些链接。问题不在于跨 DLL 调用函数。我已经想通了。问题是如何让 DLL 进行通信,以便它可以在模拟器中调用我的 API 程序。 你必须做同样的事情,但是从 C 到 C#。检查这个问题。 ***.com/questions/4428267/calling-c-sharp-from-c

以上是关于调用 DLL,然后调用 API的主要内容,如果未能解决你的问题,请参考以下文章

Labview怎么调用Windows API函数?

易语言如何调用指定DLL文件?

在asp或者aspx网页中如何调用api函数?

ExcelVBA如何调用API DLL(Delphi生成)

易语言中为啥调用API_ReadProcessMemory 来读字节集 要先取空白字节集()赋值给 缓冲区

易语言怎么调用C写的DLL