假设一个程序员正在尝试为 Windows 编写一个程序来模拟鼠标或键盘输入。Windows 具有用 C++ 编写的函数,当一起使用时可以实现这一点。如果有人用 C、Rust 或其他非 C++ 编译语言编程,那么编写所需程序的好方法是什么?
程序员是否需要学习 C++,或者是否有其他方法可以在不学习操作系统编程语言的情况下编写程序?
有没有办法用程序员习惯的语言完成项目的一部分,用另一种语言完成另一部分?这样程序员就可以只学习另一种语言的一部分。
我听说 Windows 是使用 C 和 C++ 制作的,这就是为什么我认为最后一个选项可能是可行的。
旁注:我尝试使用标签“多种语言”,但它一直被更改为“多语言”。
这取决于所涉及的语言及其各自的运行时:
从 C++ 调用 C 非常简单。在 C++ 代码中,你可以将 C 方法声明为:
从 Kotlin 或 Groovy 或其他基于 JVM 的语言调用 Java 同样简单,因为这些语言具有通用的运行时类型系统。
在其他情况下,情况可能会复杂得多:
从 Java(21 及更早版本)调用 C 或 C++ 代码需要使用 JNI 或 JNA。它们的工作原理略有不同,但在这两种情况下,程序员都需要处理类型系统的不兼容性;例如,从一种字符串表示形式转换为另一种字符串表示形式,复制对象以使 Java GC 不会移动它们。
从 Python 调用 C 需要编写
ctypes
包装器。当在托管/垃圾收集语言(例如 Python、Java)和非托管语言(例如 C、C++)之间建立桥梁时,您会引入风险,即在非托管端执行的操作会破坏垃圾收集器不变量。这很复杂。
那么这在实践中意味着什么?
人们经常使用跨语言调用,因为一种语言(据说)比另一种语言“更快”。但结果往往并不理想;也就是说,由于与调用相关的开销,他们无法获得预期的加速。然后是线程安全……