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