jjzjj

java - 如何使用 Java native 接口(interface)从 Java 调用 Go 函数?

可以通过JNA调用C方法Java中的接口(interface)。如何使用Go实现相同的功能?packagemainimport"fmt"import"C"//exportAddfuncAdd(x,yint)int{fmt.Printf("Gosays:adding%vand%v\n",x,y)returnx+y} 最佳答案 在查看有关GoSharedLibraries的文档后:可以集成JavaSpringBatch对Go函数的调用。下面是一个简短的例子:Go函数:packagemainimport"fmt"import"C"//ex

go - 如何将 **C.char 数据传回调用者的缓冲区?

我将构建一个将字符串传回Java的Go共享对象二进制文件(.DLL和.so)。为了计算从Go传递的C字符串,我写了这个:packagemain/*#include*/import"C"import("log""unsafe")//exportpassBackHellofuncpassBackHello(buf**C.char)C.int{str:="HelloWorld!"length:=len(str)cString:=C.CString(str)//returns*C.chardeferC.free(unsafe.Pointer(cString))log.Println("Inpa

java - 如何使用 JNA 为具有多个返回值的 go 函数编写接口(interface)

我正在尝试导出一些Go函数并在Java中调用它们,使用JNA,但我不知道如何在Java中为具有多个返回值的Go函数定义接口(interface)。假设Go函数是://exportgenerateKeysfuncgenerateKeys()(privateKey,publicKey[]byte){return.....}返回值有两项,但在Java中,只允许有一项返回值。我能做什么? 最佳答案 cgo为多个返回值创建专用的C结构,并将各个返回值作为结构元素。在您的示例中,cgo将生成/*ReturntypeforgenerateKeys

c - JNA 简单函数调用适用于 linux (x64) 但不适用于 Windows (x86)

我正在尝试使用JNA从Java运行以下C函数,但我在x86windows(DLL)而不是x64linux(.SO)上收到错误(无效内存访问)。c函数char*testcopy(char*out,char*in){strcpy(out,in);free(in);returnout;};C测试:适用于两个平台(EclipseCDT/MVC++)通过linux共享库或windowsdll暴露函数,直接在C中调用,结果OK。...charout[10];char*res;char*in=(char*)malloc(3*sizeof(char));strcpy(in,"ab");res=test

java - 找不到指定的程序 (MapVirtualKeyEx) JNA (Java)

我正在使用JNA,需要使用MapVirtualKeyEx函数。这是签名:UINTWINAPIMapVirtualKeyEx(__inUINTuCode,__inUINTuMapType,__inout_optHKLdwhkl);有关签名的更多信息可在此处找到:http://msdn.microsoft.com/en-us/library/ms646307(v=vs.85).aspx我试过这个:intMapVirtualKeyEx(intuCode,intnMapType,intdwhkl);但它不匹配。我感觉是_inout_opt导致了问题。我得到的错误是:找不到指定的过程。stati

java - 在Windows上使用JNA调用__cpuid函数

我需要用Java获取处理器信息(供应商、型号等)。我通常会使用C/C++,但不幸的是,对于我当前的项目,这必须在Java中完成。我正在使用JNA进行native访问,并且我已声明我的JNALibrary如下:publicinterfaceCLibraryextendsLibrary{publicvoid__cpuid(int[]CPUInfo,intInfoType);}我正在尝试这样调用:CLibraryc=(CLibrary)Native.loadLibrary("msvcrt",CLibrary.class);int[]CPUInfo=newint[4];c.__cpuid(CP

java - 在 Java 中获取 Windows 充电状态

我正在尝试判断天气情况,我的Windows笔记本电脑是否正在充电。我希望它进行检查,如果正在充电则返回1或true,否则返回0或false。我正在按照HowtogettheremainingbatterylifeinaWindowssystem?中的说明进行操作,但我想不出如何解析答案并获取充电状态。有人有什么建议吗?编辑:我希望能够输入类似boolean电池=getBattery();并让它返回true或false 最佳答案 您可以使用引用的source中的getBatteryFlagString()方法.或者直接使用Batter

c# - 使用 JNA 在 Windows 资源管理器中获取选定的文件项

我正在使用Java为Windows编写OSXQuick-look替代方案,但在如何在Activity资源管理器窗口中获取Activity文件选择方面遇到了问题,以下是我的尝试:@OverridepublicvoidnativeKeyReleased(NativeKeyEvente){System.out.println("keyup:"+NativeKeyEvent.getKeyText(e.getKeyCode()));if(e.getKeyCode()==NativeKeyEvent.VK_SPACE){System.out.println("Spacedetected!inter

java - 如何通过java程序获取exe运行的进程id

我正在通过javaruntimeapi运行一个exeProcessprocess=runTime.exec("cmd.exe/cstartabc.exe"+Id,null,newFile("D:/My"));并像这样使用jna检索进程ID-Kernel32.INSTANCE.GetProcessId((Long)f.get(process));但返回的进程ID不是abc.exe而是cmd.exe.....我需要abc.exe的进程ID。不知道如何获得任何人都可以帮助。 最佳答案 process是java.lang.Process类型

java - 使用 JNA 设置 ProgramData 子文件夹的写入权限

我有一个用Java编写的程序,它最初使用它在ProgramFiles中的目录来编写该程序的所有用户都可以访问的文件。这要求我们的用户始终以管理员身份运行。为了缓解这种情况,我们决定使用%ALLUSERSPROFILE%环境变量将需要在常规使用期间写入的文件移动到ProgramData文件夹。如果在安装过程中将此目录中的子文件夹指定为可写,则将此目录中的子文件夹用于我们的应用程序效果很好,这在使用NSIS时效果很好。问题来自升级现有用户。Java文件API提供了setWritable但在开发机器上测试后这似乎不起作用。Java7的新文件API似乎可以解决这个问题,但由于没有发布日期,我宁