Description
Describe the Issue
我在使用go(wails库)做一个桌面客户端软件, 调用编译出来的共享库时,我想把GraalIsolateThread共享出来,不用每次调用都创建GraalIsolateThread,最重要的是我使用go打包的时候启用了windowsgui ,
go build -tags desktop,production -gcflags "all=-N -l" -ldflags "-H windowsgui"
如果不使用这个windowsgui 命令,就没问题,只要添加这个命令就会出问题,这个命令会隐藏掉cmd控制台命令框.
我不想启动了我的桌面客户端软件的同时 还显示一个cmd控制台命令框在那里
Using the latest version of GraalVM can resolve many issues.
- I tried with the latest version of GraalVM.
GraalVM Version
java version "24.0.1" 2025-04-15
Java(TM) SE Runtime Environment Oracle GraalVM 24.0.1+9.1 (build 24.0.1+9-jvmci-b01)
Java HotSpot(TM) 64-Bit Server VM Oracle GraalVM 24.0.1+9.1 (build 24.0.1+9-jvmci-b01, mixed mode, sharing)
Operating System and Version
Windows11
Troubleshooting Confirmation
- I tried the suggestions in the troubleshooting guide.
Run Command
native-image --shared -H:Name=dll/Knx.Sdk -H:+UnlockExperimentalVMOptions --enable-native-access=ALL-UNNAMED -H:+JNI -J-Xss8m -H:+ReportExceptionStackTraces -H:IncludeResources=org/usb4java/win32-x86-64/libusb4java.dll -H:ConfigurationFileDirectories=./config --initialize-at-build-time=com.seawin.KnxSdk -cp target/knx-sdk-1.0.jar
Expected Behavior
我在使用go(wails库)做一个桌面客户端软件, 调用编译出来的共享库时,我想把GraalIsolateThread共享出来,不用每次调用都创建GraalIsolateThread,最重要的是我使用go打包的时候启用了windowsgui ,
go build -tags desktop,production -gcflags "all=-N -l" -ldflags "-H windowsgui"
如果不使用这个windowsgui 命令,就没问题,只要添加这个命令就会出问题,这个命令会隐藏掉cmd控制台命令框.
我不想启动了我的桌面客户端软件的同时 还显示一个cmd控制台命令框在那里
Actual Behavior
通过以上共享后,在其他函数中使用GraalIsolateThread的时候报错The handle is invalid
Steps to Reproduce
我先执行InitSdkDll函数,再去执行SearchServers的result, _, err1 := proc.Call(uintptr(unsafe.Pointer(thread)))
这一步就报错
var (
sdkDll *syscall.DLL
thread *GraalIsolateThread
)
func InitSdkDll() error {
dll, err := syscall.LoadDLL("Knx.Sdk.dll")
if err != nil {
return fmt.Errorf("DLL load failed: %w", err)
}
sdkDll = dll
proc, err := dll.FindProc("graal_create_isolate")
if err != nil {
return fmt.Errorf("proc not found: %w", err)
}
params := &GraalCreateIsolateParams{Version: 4}
var isolate *GraalIsolate
ret, _, _ := proc.Call(
uintptr(unsafe.Pointer(params)),
uintptr(unsafe.Pointer(&isolate)),
uintptr(unsafe.Pointer(&thread)),
)
if ret != 0 {
return errors.New("isolate creation failed")
}
return nil
}
func SearchServers() (string, error) {
if thread == nil {
return "", errors.New("thread not initialized")
}
proc, err := sdkDll.FindProc("SearchKnxServers")
if err != nil {
return "", fmt.Errorf("proc not found: %w", err)
}
result, _, err1 := proc.Call(uintptr(unsafe.Pointer(thread)))
if err1 != nil && err1 != syscall.Errno(0) {
return "", fmt.Errorf("API call failed: %w", err1)
}
return C.GoString((*C.char)(unsafe.Pointer(result))), nil
}
Additional Context
No response
Run-Time Log Output and Error Messages
No response