Problem with concating of multiple wide string in wcout - unnecessary space after each charcater

Jorn Vernee jorn.vernee at oracle.com
Tue Dec 14 16:21:18 UTC 2021


(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://github.com/tornaia/panama-tutorial.
> 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