[External] : Re: Problem with concating of multiple wide string in wcout - unnecessary space after each charcater
Jorn Vernee
jorn.vernee at oracle.com
Tue Dec 14 17:13:29 UTC 2021
Ah, good catch Rado!
I was using WindowsTerminal.exe, which is a new-ish Windows terminal [1].
If I switch to vanilla cmd.exe (conhost.exe), I can reproduce the issue
with the simplified example I posted earlier:
WARNING: Using incubator modules: jdk.incubator.foreign
warning: using incubating module(s): jdk.incubator.foreign
1 warning
T e s t i n g w c o u t
So, it seems to be a console issue.
Jorn
[1]: https://github.com/microsoft/terminal
On 14/12/2021 17:58, Radosław Smogura wrote:
> Hi,
>
> Sorry for obvious misprint from prev message.
>
> And just to emphasize more what Maurizio told.
>
> Generally terminal is just serial character stream (8bits, originally it was 7).
>
> This how this bits will be processed depends on terminal and locale. One terminal can process it byte by byte, 2nd one can be so smart to process few bytes and print UTF-8, some other UTF-16, some can change colors for specified bytes sequences - this all depends on term and configuration - not so much standard protocols here (although UTF-8 right now use everyone).
>
> Plain Win terminal is a basic stuff and may not support all things. You can try with different terminals / consoles. (I’m more NIX guy, but there’s nice terminal from MS store to download).
>
> BR,
> Rado
>
>> On Dec 14, 2021, at 5:37 PM, Radosław Smogura <mail at smogura.eu> wrote:
>>
>> Hi,
>>
>> Can it be released to terminal? Maybe your terminal does not accept wide chars and the space is 0x00? I wonder if you could copy paste output form terminal to some file and check hex content, or forward output to text file and check hex?
>>
>> BR,
>> Rado
>>
>>> On Dec 14, 2021, at 5:22 PM, Jorn Vernee <jorn.vernee at oracle.com> wrote:
>>>
>>> (Sending my earlier reply to panama-dev as well)
>>>
>>> Hi Ladislav,
>>>
>>> I'm also not able to reproduce the issue. Can we try a simpler example first?
>>>
>>> I have a lib.cpp file like so:
>>>
>>> #include <iostream>
>>>
>>> extern "C"
>>> __declspec(dllexport)
>>> void print() {
>>> std::wcout << "Testing wcout" << std::endl;
>>> }
>>>
>>> A CMakeLists.txt to compile it:
>>>
>>> cmake_minimum_required(VERSION 3.14)
>>> project(TestingWCout)
>>>
>>> add_library(Lib SHARED lib.cpp)
>>>
>>> install(TARGETS Lib)
>>>
>>> And a file Test.java like so:
>>>
>>> import jdk.incubator.foreign.*;
>>> import java.lang.invoke.*;
>>>
>>> public class Test {
>>> public static void main(String[] args) throws Throwable {
>>> System.loadLibrary("Lib");
>>> MemoryAddress sym = SymbolLookup.loaderLookup().lookup("print").get();
>>> MethodHandle mh = CLinker.getInstance().downcallHandle(sym, MethodType.methodType(void.class), FunctionDescriptor.ofVoid());
>>> mh.invokeExact();
>>> }
>>> }
>>>
>>> And, using the panama snapshot:
>>>
>>>> java --version
>>> openjdk 17-panama 2021-09-14
>>> OpenJDK Runtime Environment (build 17-panama+3-167)
>>> OpenJDK 64-Bit Server VM (build 17-panama+3-167, mixed mode, sharing)
>>>
>>> Build and run it with (I've used powershell here):
>>>
>>> $ cmake -B build -S . '-DCMAKE_INSTALL_PREFIX=install' -T host=x64 -A x64
>>> $ cmake --build build --config Release --target install
>>> $ java --add-modules jdk.incubator.foreign --enable-native-access=ALL-UNNAMED '-Djava.library.path=./install/bin' Test.java
>>>
>>> This ends up printing:
>>>
>>> WARNING: Using incubator modules: jdk.incubator.foreign
>>> warning: using incubating module(s): jdk.incubator.foreign
>>> 1 warning
>>> Testing wcout
>>>
>>> Could you try and see if that works? I've also uploaded the files here: http://cr.openjdk.java.net/~jvernee/wcout/
>>>
>>> Thanks,
>>> Jorn
>>>
>>>
>>>>> On 14/12/2021 12:47, Ladislav Török wrote:
>>>> Here is copy of my conversation with Maurizio Cimadamore:
>>>> 1. email by me:
>>>> Hi,
>>>>
>>>> use the example panama-tutorial-005 on
>>>> https://urldefense.com/v3/__https://github.com/tornaia/panama-tutorial__;!!ACWV5N9M2RV99hQ!eEkLJqAKWjpuD1XsxSiIJVO9XuqJjk1I3F_4VRr-lFqoUiYPRXj03c5P5zUkdh_7$ .
>>>> I am checked and result in my console on Windows (CMD) is:
>>>> ---
>>>> D:\repositories\moje\GitHub\tornaia\panama-tutorial\panama-tutorial-005>java
>>>> --enable-preview --add-modules jdk.incubator.foreign
>>>> --enable-native-access=ALL-UNNAMED
>>>> -Djava.library.path=lib/helloworldwinrt/target -classpath
>>>> target/classes;lib/target/jar/*
>>>> com.github.tornaia.panama.tutorial005.Tutorial005
>>>> WARNING: Using incubator modules: jdk.incubator.foreign
>>>> Start
>>>> N u m b e r o f d e v i c e s : 2 5 9 5
>>>> End
>>>>
>>>> D:\repositories\moje\GitHub\tornaia\panama-tutorial\panama-tutorial-005>
>>>> ---
>>>> See space after each character of started in place where is used concating
>>>> of multiple wide string in wcout.
>>>> !!! Build the sample is in Microsoft Visual Studio 2019, configuration is
>>>> Release x64 !!! For configuration Debug x64 is all ok.
>>>> Output is:
>>>> ---
>>>> D:\repositories\moje\GitHub\tornaia\panama-tutorial\panama-tutorial-005>java
>>>> --enable-preview --add-modules jdk.incubator.foreign
>>>> --enable-native-access=ALL-UNNAMED
>>>> -Djava.library.path=lib/helloworldwinrt/target -classpath
>>>> target/classes;lib/target/jar/*
>>>> com.github.tornaia.panama.tutorial005.Tutorial005
>>>> WARNING: Using incubator modules: jdk.incubator.foreign
>>>> Start
>>>> Number of devices: 2595
>>>> End
>>>>
>>>> D:\repositories\moje\GitHub\tornaia\panama-tutorial\panama-tutorial-005>
>>>> ---
>>>>
>>>> Thanks.
>>>>
>>>> 2. email by Maurizio Cimadamore (his answer on my 1. email by me):
>>>>
>>>> Adding Jorn, who might know more.
>>>>
>>>> One control question first: have you tried calling your C++ code directly
>>>> (e.g. w/o Panama, using a `main`) ? I have a feeling that you might get the
>>>> same behavior there. I note that your CPP library is not really returning a
>>>> string back to Java, but it's doing a `cout` to print things on the
>>>> terminal console. It's unlikely that Panama will have any effect here.
>>>>
>>>> (in general, please use mailing list :-)).
>>>>
>>>> Thanks
>>>> Maurizio
>>>>
>>>> *** Here is my reaction on previous 2. email by Maurizio Cimadamore ***
>>>> I was try of calling my C++ code directly (without Panama, using a 'main')
>>>> in other application - building of this application in Microsoft Visual
>>>> Studio 2019, configuration1 Release x64 and configuration2 Debug x64 and is
>>>> all ok (in both cases):
>>>> --- Debug ---
>>>> Microsoft Windows [Version 10.0.19043.1348]
>>>> (c) Microsoft Corporation. All rights reserved.
>>>>
>>>> D:\MSVS2019\Projects\Project2\x64\Debug>Project2.exe
>>>> Number of devices: 2595
>>>> Result: 0
>>>>
>>>> D:\MSVS2019\Projects\Project2\x64\Debug>
>>>> --- Debug ---
>>>>
>>>> --- Release ---
>>>> Microsoft Windows [Version 10.0.19043.1348]
>>>> (c) Microsoft Corporation. All rights reserved.
>>>>
>>>> D:\MSVS2019\Projects\Project2\x64\Release>Project2.exe
>>>> Number of devices: 2595
>>>> Result: 0
>>>>
>>>> D:\MSVS2019\Projects\Project2\x64\Release>
>>>> --- Release ---
>>>>
>>>> Code of my client application:
>>>> #include "helloworldwinrt.h"
>>>> #include <stdio.h>
>>>>
>>>> int main()
>>>> {
>>>> int result = print_number_of_devices();
>>>> printf("Result: %d\n", result);
>>>> }
>>>>
>>>> "I note that your CPP library is not really returning a string back to
>>>> Java, but it's doing a `cout` to print things on the terminal console." ---
>>>> Yes.
>>>>
>>>> " It's unlikely that Panama will have any effect here." --- It doesn't look
>>>> like that yet. Could someone practically try it?
>>>>
>>>> Thanks
>>>> Ladislav
More information about the panama-dev
mailing list