Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > переименовать функцию в DLL с JNA


Автор: qpile 3.2.2010, 16:16
 Java не поддержживает @ в имени функции..Как мне ее переименовать??В нете НИ ОДНОГО примера нет!
Код

  public interface TransToQuik  extends Library{

public int  _TRANS2QUIK_CONNECT@16(String lpcstrConnectionParamsString, LongByReference pnExtendedErrorCode, String lpstrErrorMessage, int dwErrorMessageSize);

 }

  LongByReference pnExtendedErrorCode= new LongByReference();
    String Error;
    int len;
    int FunctionResult=0;
   
    String lpstrErrorMessage="";
    int dwErrorMessageSize=0;
    TransToQuik lib = (TransToQuik) Native.loadLibrary ("D://java project//Robot//TRANS2QUIK.dll",TransToQuik.class);

   FunctionResult=lib._TRANS2QUIK_CONNECT@16("D://QUIK5.15//",pnExtendedErrorCode,lpstrErrorMessage,dwErrorMessageSize);

Автор: casey 4.2.2010, 10:11
Вот тебе длл с переименованными функциями:                         _TRANS2QUIK_CONNECT@16       --->             TRANS2QUIK_CONNECT

не знаю как загружать файлы на форум, выкладываю тут:       hart2dde.narod.ru/TRANS2QUIK.dll

Автор: qpile 4.2.2010, 12:26
Спасибо !БИблу цепляет! Но хотелось бы все таки разобратсьяс переименованием

Вот пишу такой код..
Код

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Евгений
 */

import com.sun.jna.*;
import java.util.*;

import com.sun.jna.win32.StdCallFunctionMapper;
import java.lang.reflect.*;



public class NewClass {

   public interface Kernel32 extends Library {
       public boolean Beep1(int FREQUENCY, int DURATION);
       public void Sleep1(int DURATION);
   }




   public static void main(String[] args) {
       
Map options = new HashMap();

options.
    put(
        Library.OPTION_FUNCTION_MAPPER, 
        new StdCallFunctionMapper() {
            public String getFunctionName(NativeLibrary library, Method method) {
              
                if (method.getName().equals("Beep")){
                 
                    method.setName("beep1");
                }
           
                return super.getFunctionName(library, method);
            }
        }
    );



       Kernel32 lib = (Kernel32) Native.loadLibrary("kernel32", Kernel32.class);
    lib.Beep1(698, 1500);
    lib.Sleep1(500);
    lib.Beep1(698, 1500);
   
   }
}


Хочу переименовать BEEP.. Но ругается на SETNAME

Автор: casey 8.2.2010, 13:49
По ходу так нужно:


 
Код


package javaapplication2;

import com.sun.jna.*;
import com.sun.jna.Native;
import java.util.HashMap;


public class Main{
   public interface Kernel32 extends Library {
       public boolean Beep123(int FREQUENCY, int DURATION);
       public void Sleep123(int DURATION);
   }

    public static void main(String[] args) {

       HashMap optionMap = new HashMap();
        optionMap.put("Sleep123","Sleep"); 
        optionMap.put("Beep123","Beep"); 

   Kernel32 INSTANSE = (Kernel32)Native.loadLibrary ("c:\\WINNT\\system32\\kernel32.dll ",Kernel32.class,optionMap);


int i=25;
   INSTANSE.Beep123(3290/i, 400);
   INSTANSE.Beep123(4940/i, 400);
   INSTANSE.Beep123(3920/i, 900);
   INSTANSE.Sleep123(200);

   INSTANSE.Beep123(3290/i, 400);
   INSTANSE.Beep123(4940/i, 400);
   INSTANSE.Beep123(4150/i, 250);
   INSTANSE.Beep123(3920/i, 800);
   INSTANSE.Sleep123(400);

   INSTANSE.Beep123(3290/i, 400);
   INSTANSE.Beep123(4940/i, 400);
   INSTANSE.Beep123(3920/i, 500);
   INSTANSE.Sleep123(300);
   INSTANSE.Beep123(4940/i, 400);
   INSTANSE.Beep123(3290/i, 700);
   INSTANSE.Sleep123(600);
    }

}




Deep Purple Forever!!!!!   -  подобрал как смог

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)