Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Jni и WinApi 
V
    Опции темы
Pavel_V
Дата 20.2.2008, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 19.2.2008

Репутация: нет
Всего: нет



Хочу через JNI вызвать функцию winapi.

беру класс-враппер (hellonative.java):

Код

class HelloNative
{
         public native static void greeting(String message);
         static{
                  System.loadLibrary("HelloNative");
         }
}


комплилирую:
javac hellonative.java
получаю заголовок:
javah HelloNative
(hellonative.h)
Код

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

#ifndef _Included_HelloNative
#define _Included_HelloNative
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     HelloNative
 * Method:    greeting
 * Signature: (Ljava/lang/String;)V
 */
JNIEXPORT void JNICALL Java_HelloNative_greeting
  (JNIEnv *, jclass, jstring);

#ifdef __cplusplus
}
#endif
#endif



делаю функцию, которая будет вызывать winApi:
(hellonative.cpp)
Код

#include "HelloNative.h"
#include "windows.h"
        
JNIEXPORT void JNICALL Java_HelloNative_greeting(JNIEnv* env, jclass cl,jstring message){
    
    HWND hwnd;
     hwnd = GetDesktopWindow();
    
}


вызываю компилятор:
cl -I "c:\Program Files\java\jdk1.6.0\include" -I"c:\program files\java\jdk1.6.0\include\win32" -LD HelloNative.cpp -FeHelloNative.dll


получаю вот что:

/dll
/implib:HelloNative.lib
/out:HelloNative.dll
HelloNative.obj
    Creating library HelloNative.lib and object HelloNative.exp
HelloNative.obj : error LNK2001: uresolved external symbol __imp__GetDesktopWindow@0
HelloNative.dll :fatal error LNK1120: 1 unresolved externals


В Си я дуб, по этому могу чего-то не понимать. smile 
Помогите пожалуйста разобратся, как это сделать.
Без winApi все работало, компилилось и вызывалось.
PM MAIL   Вверх
w1nd
Дата 21.2.2008, 00:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54



Наверное, надо подцепить в проект библиотечку-обёртку функций user32.


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
Pavel_V
Дата 21.2.2008, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 19.2.2008

Репутация: нет
Всего: нет



а можно поподробнее, если не сложно куда и что подключить?
почему из MSVC++ такое приложение компилится без ошибок и запускается,
(ну не совсем такое, просто минимальное приложение с вызовом этой же функции)
а из командной строки - нет?
PM MAIL   Вверх
v2v
Дата 21.2.2008, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 8
Всего: 56



Код

System.load("c:\\winnt\\system32\\user32.dll");

в визуал студие это по дефолту ;)


--------------------
PM   Вверх
Pavel_V
Дата 21.2.2008, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 19.2.2008

Репутация: нет
Всего: нет



to  v2v:
не врублюсь, причем здесь загрузка библиотеки из кода java? 
У меня с кодом на Си проблема, а не с кодом java.
Я не могу скомпилить код библиотеки на Си, и java тут помоему не причем, хотя могу и ошибаться.

PM MAIL   Вверх
Pavel_V
Дата 21.2.2008, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 19.2.2008

Репутация: нет
Всего: нет



to  v2v:
не врублюсь, причем здесь загрузка библиотеки из кода java? 
У меня с кодом на Си проблема, а не с кодом java.
Я не могу скомпилить код библиотеки на Си, и java тут помоему не причем, хотя могу и ошибаться.
====
Модераторы, удалите пожалуйста повторное сообщение

Это сообщение отредактировал(а) Pavel_V - 21.2.2008, 21:02
PM MAIL   Вверх
v2v
Дата 21.2.2008, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 8
Всего: 56



ну вот такой же лоад либрари тебе надо сделать в С++ коде smile


--------------------
PM   Вверх
w1nd
Дата 21.2.2008, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54



Да там статическая линковка, какой ещё load. Надо в командной строке указать библиотеку, соответствующую user32. В среде это наверняка делается автоматически.

Это сообщение отредактировал(а) w1nd - 21.2.2008, 22:39


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
Pavel_V
Дата 23.2.2008, 03:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 19.2.2008

Репутация: нет
Всего: нет



все разобрался. все работает как часы.
нужно было добавить в cи коде дописать

#pragma comment(lib,"user32.lib") 

или 

в консоли

/link user32.lib
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0467 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.