2016-06-14 34 views
1

所以我有這樣的「嗶」功能的作品,但是當我嘗試任何namedpipe函數的返回:的Java JNA找不到namedpipe功能Kernel32中

Exception in thread "main" java.lang.UnsatisfiedLinkError: Error looking up function 'WaitNamedPipe': The specified procedure could not be found.

import java.nio.charset.StandardCharsets; 

import com.sun.jna.Library; 
import com.sun.jna.Native; 
import com.sun.jna.Pointer; 



/** 
* @author 
* 
*/ 
public class NamedPipeNativeFunctions { 

    /* 
    * Public Declare Function CallNamedPipe Lib "kernel32" Alias 
    * "CallNamedPipeA" (ByVal lpNamedPipeName As String, lpInBuffer As Any, 
    * ByVal nInBufferSize As Long, lpOutBuffer As Any, ByVal nOutBufferSize As 
    * Long, lpBytesRead As Long, ByVal nTimeOut As Long) As Long 
    * 
    */ 
    public interface Kernel32 extends Library { 
public long CallNamedPipe (String lpNamedPipeName,long lpInBuffer ,long nInBufferSize, Pointer lpOutBuffer,long nOutBufferSize, Pointer lpBytesRead, long nTimeOut); 
public boolean WaitNamedPipe(String lpNamedPipeName, 
     int nTimeOut); 
public boolean Beep(int FREQUENCY, int DURATION); 
    } 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     myClass myclass = new myClass() ; 
     myClass myclass2 = new myClass() ; 

     Pointer lpOutBuffer = myclass.getPointer() ; 
     Pointer lpBytesRead =myclass2.getPointer() ; 

     Kernel32 lib = (Kernel32) Native.loadLibrary("kernel32", Kernel32.class); 
     //lib.CallNamedPipe("1234TestPipe", 255, 255, lpOutBuffer , 255, lpBytesRead , 5000); 
     lib.Beep(698, 500); // works 
     boolean sucess = lib.WaitNamedPipe("hgf" ,(int) 5000); // does not work 

    } 

} 
+2

'WaitNamedPipe'是#define,可以是'WaitNamedPipeA'或'WaitNamedPipeW',具體取決於調用者是分別使用ANSII還是UNICODE。源代碼(請參閱Unicode和ANSI名稱部分):https://msdn.microsoft.com/en-us/library/windows/desktop/aa365800(v=vs.85).aspx –

+0

爲什麼標記爲C++?我在這裏沒有看到任何關係。 –

+0

@RichardCritten:您的評論解決了我的問題,您是否想將其轉換爲答案,以便我可以將其授予您? – sino

回答

2

WaitNamedPipe是#define和或者是WaitNamedPipeAWaitNamedPipeW,具體取決於調用者是分別使用ANSII還是UNICODE。源代碼(請參見Unicode和ANSI名稱部分):https://msdn.microsoft.com/en-us/library/windows/desktop/aa365800(v=vs.85).aspx

+0

如果您在實例化時使用JNA的['W32APIOptions.DEFAULT_OPTIONS'](http://java-native-access.github.io/jna/4.2.1/com/sun/jna/win32/W32APIOptions.html#DEFAULT_OPTIONS)庫,映射將自動發生。 – technomage