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


Автор: kashka 26.11.2004, 18:11
Нужна помощь,
надо из под явы winamp-ом управлять, кто знает как это делается HELP!!!!!!

Автор: AntonSaburov 26.11.2004, 18:32
Рады Вас видеть у нас на форуме. Вы можете зарегистрироваться и стать нашим постоянным участником smile

Но в следующий раз задавайте свой вопрос в отдельном топике если он не относиться к текущей теме.
Также советую знакомиться с нашими правилами
Правила форума: http://forum.vingrad.ru/index.php?s=&act=SR&f=27

По поводу вопроса - скорее всего надо будет создавать приложение через JNI, которое уже будет что-то делать с WinAmp. Хотя я не знаю как это дальше.

Возможно еще посмотреть в сторону Microsoft J++. Там был мост для COM - может WinAmp через него может управляться.

Автор: Sleepy_PIP 26.11.2004, 18:44
Цитата(kashka @ 26.11.2004, 18:11)
Нужна помощь,
надо из под явы winamp-ом управлять, кто знает как это делается HELP!!!!!!

если ты знаешь как управлять винампом из Delphi, C++ и прочих компилирующихся под win32 языков - то напиши на них .dll и вызывай ее ф. по JNI из Java. и вся проблемма. а?

Автор: AntonSaburov 26.11.2004, 18:55
Пример для JNI могу дать - там по идее все не сложно.

Автор: kashka 29.11.2004, 19:00

Hi,
Budu o4444444en' priznatel'na smile.
A chto eto za JNI, nikogda ne slishala.

Автор: AntonSaburov 30.11.2004, 17:53
JNI - Java Native Interface.
Перевод не даст общей идеи, которая заключается в том, что из JVM можно запустить код, который написан на какой-либо компилируемом языке (например на C) и лежит на диске в виде .dll (для Unix это обычно .so)

Достаточно полное описание можно найти здесь
http://java.sun.com/docs/books/tutorial/native1.1/TOC.html

А ниже сделан очень простой вариант использования JNI.

Итак, что надо:

1. Создаем обычный класс на JAVA, но тот метод, который должен использовать dll описываем как native. Кроме этого используем вызов, который загружает нашу dll.

Код

public class JniTest  
{
   static
   {
       System.loadLibrary("JniTest");
   }

   public native int showString(String message);  // обращаем внимание на слово native
}


Теперь компилируем наш пример
javac JniTest.java

Если ничего страшного не произошло, то по идее мы должны получить файл JniTest.class.

Теперь обработаем его утилитой javah. Эта утилита создаст нам .h файл для нашей программы.
Важно: надо писать файл без расширения.

javah -classpath . JniTest

Получаем файл JniTest.h вот такого вида.

Код

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class JniTest */

#ifndef _Included_JniTest
#define _Included_JniTest
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class:     JniTest
* Method:    showString
* Signature: (Ljava/lang/String;)I
*/
JNIEXPORT jint JNICALL Java_JniTest_showString
 (JNIEnv *, jobject, jstring);

#ifdef __cplusplus
}
#endif
#endif


Редактировать его уже не надо. Его надо просто включить в наш файл CPP, который показан ниже.

Код

#include <stdio.h>
#include "JniTest.h"

JNIEXPORT jint JNICALL Java_JniTest_showString(JNIEnv * jenv, jobject jobj, jstring message)
{
 const char *string = jenv->GetStringUTFChars(message, 0);
 printf("%s\n",string);
 jenv->ReleaseStringUTFChars(message, string);

 return 0;
}


В нем следует обратить внимание на обработку строк. Остальные переменные обычно не так сложны. А тут видим, что надо вытащить строку из Unicode в обычный char.
Теперь сделаем dll для нашего проекта. ЛУчше было бы, чтобы в системе уже был прописан путьдо компилятора.
JAVA_HOME - это переменная среды, которую я всегда прописываю. Вообще это путь до директории с установленной JAVA - например, C:\j2sdk1.4.2_06. (Думаю, что это понятно)

cl -I%JAVA_HOME%\include -I%JAVA_HOME%\include\win32 -LD JniTest.cpp -FeJniTest.dll

Видно, что результатом компиляции должна быть JniTest.dll. Кстати, для Unix-систем должен быть файл вида libJniTest.so. Вот такая особенность. Нужен префикс lib.

Теперь создаем тестовый пример.

Код

public class ShowJniTest
{
   public static void main(String[] args)
   {
       JniTest jt = new JniTest();
       jt.showString("Hello, world!");
       jt.showString("JNI is great!");
   }
}


Собираем
javac -classpath . ShowJniTest.java

И запускаем
java -classpath . ShowJniTest

Должно сработать smile

Автор: kashka 30.11.2004, 19:22
smile Spasibo, ja poprobuu (izwenjaus' za maneru napisanija, russkoi klawiaturi net, a tak raskladku ja ne pomnu).

Автор: Domestic Cat 30.11.2004, 19:24
Цитата
(izwenjaus' za maneru napisanija, russkoi klawiaturi net, a tak raskladku ja ne pomnu).


Есть чекбоkс рядом с кнопкой B - выделяешь и работаешь.

Автор: kashka 30.11.2004, 19:36
Da tak konechno toge mogno... wot tol'ko neudobno potomu chto NU NE ZNAU JA GDE KAKAJA BUKWA.

Автор: Domestic Cat 30.11.2004, 19:55
Там слева приписано "транслит". Для негo букв не надo помнить.

Автор: kashka 30.11.2004, 20:19
у меня по русскому всегда двойка была, а так не видно есть ошибки или нет.

Автор: Domestic Cat 30.11.2004, 21:05
Ну так лучше же, чем закорюки smile

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