php小编西瓜为您带来关于使用JNR-FFI在Java中将字符表输出到CMD屏幕缓冲区导致崩溃的问题。JNR-FFI是一个用于Java和本地代码交互的工具,但在处理字符表输出时可能会导致CMD屏幕缓冲区崩溃的情况。本文将为您解析这一问题的原因并提供解决方案,让您轻松解决这一技术难题。
我正在尝试用 java 编写一个库,它将使用 c++ 代码来直接访问 cmd 中控制台屏幕缓冲区的写入。我已经成功打印了一次,但之后崩溃了,退出代码为 0xc0000005
我使用了 jnr-ffi 库。此代码现在打印出动画的第一帧,在 if 上暂停一秒钟并崩溃。
这是代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
|
如上所述,在 cmd 中运行它会打印第一帧,冻结一秒钟并且毫无例外地崩溃,但在 intellij 控制台中运行它给了我退出代码“0xc0000005”,并在事件查看器中发现了这一点:
1 2 3 4 5 6 7 8 9 10 11 |
|
尝试用谷歌搜索,但没有找到任何我能理解的东西。有什么帮助吗?
有人指出 WriteConsoleOutputCharacterW()
中的最后一个参数应该是指向 long var 而不是 int 的指针。
改变这个:
int lpNumberOfCharsWritten = 0;“WroteCMD()”中的
对此:
Pointer lpNumberOfCharsWritten = Runtime.getSystemRuntime().getMemoryManager().allocate( Runtime.getSystemRuntime().findType( TypeAlias.int32_t ).size() );
解决了这个问题。我使用 int 作为内存地址,在本例中尝试写入地址 0。
以上是使用 JNR-FFI 将字符表输出到 CMD 屏幕缓冲区崩溃的详细内容。更多信息请关注PHP中文网其他相关文章!