【发布时间】:2021-07-09 19:49:21
【问题描述】:
我正在尝试学习如何使用原始 Win32 API 并遵循教程 here,但在我的一生中,我无法弄清楚如何通过 int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow) 函数签名来工作。我确实理解不需要int WINAPI...但是如何让所有这些参数传递给 WinAPI 调用?尤其是 hInstance 和 nCmdShow?
我的目标
从
获取 hInstance 和 nShowCmdint WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow) {}
进入 Rust 程序,可能类似于:
fn main(/* args, such as hInstance, nShowCmd here /*) {
}
或者,更可能的方式:
fn main() {
std::env::/* hopefully something like args() /*;
}
我尝试过的
我尝试获取 args,但这只是传递了我用来生成程序的命令行参数,就像 args[0] 是程序的名称,这是 预期的 em> 行为。此外,调用 args_os() 会得到相同的结果。
我也试过设置windows子系统,但是之前的行为是一样的,不是想要的行为……
#![windows_subsystem = "windows"]
我我能够通过手动调用 GetModuleHandle() 并传入一个空指针来获取 hInstance 句柄,但不知道如何手动获取 nShowCmd。
重要提示
我正在使用windows crate,这是我想要使用的。
对于这个难以捉摸的谜团的任何帮助将非常感激!
附:我的窗口确实打开了,一切正常,正如预期的那样,包括与 FFI 合作,以及那里涉及的所有疯狂,哈哈。但我只是想了解这是如何完成的。没有 nShowCmd 也可以过关,但我真的很想了解这是如何在 rust 中完成的。我也无法覆盖fn main() 函数签名,所以不知道该怎么做。
【问题讨论】: