英文:
_setmode( _fileno(stdin), _O_BINARY) waits for Enter key when compiled with /MD
问题
我正在使用JNI在DLL中嵌入Java虚拟机(JVM),以供Windows上的本地应用程序(altv-server.exe)使用。在内部,JNI_CreateJavaVM调用_setmode(_fileno(stdin),_O_BINARY)
,这会导致进程在继续之前等待按下Enter键。该函数调用成功,但等待输入的行为是不希望的。
在调用_setmode(_fileno(stdin),_O_BINARY)
之前,模式为_O_TEXT
。
当使用/MD
构建DLL时会出现此行为。
使用/MDd
时,从DLL调用_setmode
不会等待输入,但仍然从jvm.dll
中进行的函数调用会导致进程等待输入。
服务器是使用/MD
构建的,因此DLL也需要使用/MD
构建。
英文:
I am embedding a Java VM (JVM) using JNI in a DLL for a native application on Windows (altv-server.exe). Internally JNI_CreateJavaVM calls _setmode( _fileno(stdin), _O_BINARY )
which causes the process to wait for Enter key input before it continues. The function succeeds but the waiting for input is undesirable.
The mode is in _O_TEXT
prior to calling _setmode( _fileno(stdin), _O_BINARY)
.
This behaviour happens when the DLL is built with /MD
.
With /MDd
, calling _setmode
from the DLL will not wait for input, but the function call made from jvm.dll
still causes the process to wait for input.
The server is built with /MD
, and so it is required by the DLL to also be built with /MD
.
答案1
得分: 1
看起来原生应用程序有一个正在从stdin读取的线程。调用_setmode(_fileno(stdin), _O_BINARY)
会导致这种不良行为。
在_setmode(_fileno(stdin), _O_BINARY)
之后启动该线程解决了这个特定的问题。
英文:
It appears that the native application had a thread that was reading from stdin. Calling _setmode(_fileno(stdin), _O_BINARY)
causes this undesirable behaviour.
Starting that thread after _setmode(_fileno(stdin), _O_BINARY)
resolved this particular problem.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论