gpt4 book ai didi

winapi - 是否可以从 Forth 调用 Windows API?

转载 作者:行者123 更新时间:2023-12-02 07:22:02 27 4
gpt4 key购买 nike

在 C/C++ 中,Windows 可执行文件与导入包含 Windows API 过程的 DLL 文件的静态库链接。

但是我们如何从 Forth 代码(例如 GForth)访问这些过程?这可能吗?

我知道 Win32Forth 能够执行 Win32 功能,但我感兴趣的是如何(以及是否)在缺少此功能的 Forth 实现中完成此操作(但确实在目标操作系统上运行,并且有可能)能够在一定程度上与其交互)。

目前我想到的是加载有问题的 DLL 文件并以某种方式定位要执行的过程的地址 - 但是,如何执行? (我所知道的是 Windows API 使用 stdcall习俗)。我们如何定位没有 C 头文件的过程? (我对 Forth 很陌生,对 C++ 不太陌生。如果我的想法是胡说八道,请耐心等待)。

最佳答案

一般情况下,要在某些 Forth 系统中实现动态加载库的外部函数接口(interface) (FFI) 作为扩展(即不更改源代码和重新编译),我们需要 dlopendlsym 函数、Forth 汇编程序以及对 Forth 系统组织和 ABI 的深入了解。有时即使没有汇编器也可以完成。例如,虽然 SP-Forth有FFI,国外来电也有implemented在纯 Forth 中,由于 native 代码生成以及返回堆栈与 native 硬件堆栈的联合。

关于 Gforth,似乎在 0.7.9 版本中(参见 releases ),它没有开箱即用的 stdcall 调用约定的 FFI(仅 supports cdecl ),尽管它有 dlopen and dlsym 。 ,和an assembler 。所以,为stdcall实现FFI应该是可行的。

关于winapi - 是否可以从 Forth 调用 Windows API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32428805/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com