gpt4 book ai didi

java - 从 Java : Possible ? 调用 WinMain 还有其他方法吗?

转载 作者:太空宇宙 更新时间:2023-11-04 16:26:49 24 4
gpt4 key购买 nike

我如何从 java 中调用此方法:

 WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)

是否可以从 java 调用 WinMain ?我希望该函数中的参数值与直接运行 C++ 程序时的值相同。我想链接一个 .dll,其入口点是这个函数。

最佳答案

出于多种原因,这是个坏主意。

WinMain很特别

mainDllMain 一样,这些函数比看起来要多得多。

与天真的方法相反,WinMain 不是堆栈上的“第一个”函数。这是代码开发人员可编写的第一个函数。但是,如果您进行调试,您会发现 WinMain 前后发生了很多事情。

其中,C++全局对象的构造/析构,函数注册于atexit C API 等,但您可以确定那里发生了很多特定于 Windows 平台的事情。

那么,如果它是一个 WinMain,那么您内部某处可能有一个消息循环。它很可能会干扰您自己的应用程序(您的 Java 应用程序是 GUI 应用程序吗?)

HINSTANCE 不是可选的

你会给 WinMain 什么参数值?

第一个 HINSTANCE 参数非常重要,您尝试启动的可执行文件的代码可能会用到它。您不能只提供一些随机值并期望它起作用。您可以检索 Java 进程的 HINSTANCE,但我怀疑您不喜欢这个结果。

隐藏变量不是可选的

假设您成功调用了程序的 WinMain。这个程序会期望一些东西在那里(参见 WinMain is special 部分)。其中,GetCommandLine() API 函数的结果,可以在您的 C++ 程序中使用。

WinMain 用于进程,而不是 DLL

Is it possible to call WinMain from java ? I want the value of the arguments in that function be same as when directly running a c++ program. I want to link a .dll whose entry point be this function

您是否正在尝试“启动”一个入口点为 WinMain 的 DLL?估计是哪里出了问题。 WinMainmain 是 Windows 上进程的标准入口点,而不是 DLL。 DLL 入口点通常是具有不同原型(prototype)的 DllMain

结论

我不知道为什么您需要在与 Java 启动器相同的进程中启动可执行文件,但我相信您做错了什么。

mikera在他的 answer 中写道,您最好使用 Java API 来启动进程。

关于java - 从 Java : Possible ? 调用 WinMain 还有其他方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10798559/

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