各位大侠好,我想请问一个JNA的SOCKET问题问题源于java对DLL的调用.DLL是C++写的,我使用JNA技术
DLL中函数DUABind的返回值是SOCKET*类型,它是其他函数的输入参数,但是其他类型需要SOCKET.我用IntByReference变量得到了SOCKET*的值,但不知道如何得到相应的SOCKET值,其他函数不能调用了,另外我在JAVA中直接用SOCKET("192.168.0.87",1521)创建SOCKET直接带入需要SOCKET类型的函数,报错说函数不支持这种类型,是不是JAVA和C++里的SOCKET还不一样呢?请大家指点一下,非常感谢. 

解决方案 »

  1.   

    c++的类型,用jni可以直接传递给java的只有积累,你可以在jni.h这个头文件里看到哪些数据类型可以用,似乎没见过SOCKET这种类型的,应该需要自己再转换一下。
      

  2.   

    答:若只是:“用IntByReference变量得到了SOCKET*的值,但不知道如何得到相应的SOCKET值,其他函数不能调用了, ”
    则:由IntByReference变量(相当于:SOCKET*的值)得到int(相当于:得到相应的SOCKET值),可用:
    IntByReference变量.getValue()
    然后将这个int(相当于:得到相应的SOCKET值),传送给:其他函数的输入参数。
    这个是简单的。
    只是:如何将这个得到相应的SOCKET值,转变成JAVA中的网络通信用的那个SOCKET类的对象,还没有好的想法[很可能就是不可行的],即无法转换的。
      

  3.   

    答:先试试第一个,由IntByReference变量得到了SOCKET*的值,通过getValue()得到相应的SOCKET值
      

  4.   


    这个试过了,不行呢.
    我想在C++下面把原来的dll再封装一遍,再弄个新的DLL,输入参数改成SOCKET,一了百了,顺便有几个结构体指针的指针的也给改了,您看行不?