2016-06-14 8 views
1

그래서이 "음"기능이 작동하지만, 내가 명명 된 파이프 기능 중 하나를 시도 할 때 반환이 :자바 JNA는의 Kernal32에서 명명 된 파이프 기능을 찾을 수 없습니다

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

호출자가 ANSII 또는 UNICODE를 각각 사용하는 경우 'WaitNamedPipe'는 #define이고 WaitNamedPipeA 또는 WaitNamedPipeW입니다. 원본 (유니 코드 및 ANSI 이름 섹션 참조) : https://msdn.microsoft.com/en-us/library/windows/desktop/aa365800(v=vs.85).aspx –

+0

이 태그가 C++ 인 이유는 무엇입니까? 나는 어떤 관계도 여기에서 보지 않는다. –

+0

@RichardCritten : 귀하의 의견은 내 문제를 해결합니다. 귀하의 의견에 답할 수 있도록 변환하겠습니까? – sino

답변

2

WaitNamedPipe가 정의 #입니다 중 하나입니다 WaitNamedPipeA 또는 WaitNamedPipeW 호출자가 각각 ANSII 또는 UNICODE를 사용하는지 여부에 따라 다릅니다. Source (유니 코드 및 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