Форум программистов, компьютерный форум CyberForum.ru

Интеграция кода c++ в java - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
Why so seriouS
 Аватар для Why so seriouS
44 / 44 / 1
Регистрация: 12.03.2013
Сообщений: 167
15.05.2013, 18:55     Интеграция кода c++ в java #1
Вот решил переписать пример с одной книги где показано как в код java вставить код c++. Но почему-то много ошибок, не подскажете почему?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include "A.h"
#include "jni.h"
 
JNIEXPORT void JNICALL Java_A_show(JNIEnv *env, jobject obj)
{
    jclass cls;
    jfieldID fid;
    jint i;
    cls = (*env)->GetObjectClass(env,obj);
    fid = (*env)->GetFieldID(env,cls,"i","I");
 
    i = (*env)->GetIntField(env,obj,fid);
    std::cout<<"i = "<<i;
    (*env)->SetIntField(env,obj,fid,2*i);
    std::cout<<std::endl<<"i = "<<i;
}
A.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/* DO NOT EDIT THIS FILE - it is machine generated */
#include "jni.h"
/* Header for class A */
 
#ifndef _Included_A
#define _Included_A
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     A
 * Method:    show
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_A_show
  (JNIEnv *, jobject);
 
#ifdef __cplusplus
}
#endif
#endif
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class A
{
    int i;
    public static void main(String [] args)
    {
        A a = new A();
        a.i = 10;
        a.show();
    }
    public native void show();
 
    static{
        System.loadLibrary("A");
    }
}

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
------ Построение начато: проект: temp, Конфигурация: Debug Win32 ------
  main.cpp
c:\documents and settings\admin\мои документы\visual studio 2010\projects\temp\temp\main.cpp(10): error C2819: тип "JNIEnv_" не имеет перегруженный "operator ->"
          c:\documents and settings\admin\мои документы\visual studio 2010\projects\temp\temp\jni.h(782): см. объявление "JNIEnv_"
          возможно, имеется в виду "."
c:\documents and settings\admin\мои документы\visual studio 2010\projects\temp\temp\main.cpp(10): error C2232: ->JNIEnv_::GetObjectClass: левый операнд имеет тип "struct", используйте "."
c:\documents and settings\admin\мои документы\visual studio 2010\projects\temp\temp\main.cpp(10): error C2065: env: необъявленный идентификатор
c:\documents and settings\admin\мои документы\visual studio 2010\projects\temp\temp\main.cpp(11): error C2819: тип "JNIEnv_" не имеет перегруженный "operator ->"
          c:\documents and settings\admin\мои документы\visual studio 2010\projects\temp\temp\jni.h(782): см. объявление "JNIEnv_"
          возможно, имеется в виду "."
c:\documents and settings\admin\мои документы\visual studio 2010\projects\temp\temp\main.cpp(11): error C2232: ->JNIEnv_::GetFieldID: левый операнд имеет тип "struct", используйте "."
c:\documents and settings\admin\мои документы\visual studio 2010\projects\temp\temp\main.cpp(13): error C2819: тип "JNIEnv_" не имеет перегруженный "operator ->"
          c:\documents and settings\admin\мои документы\visual studio 2010\projects\temp\temp\jni.h(782): см. объявление "JNIEnv_"
          возможно, имеется в виду "."
c:\documents and settings\admin\мои документы\visual studio 2010\projects\temp\temp\main.cpp(13): error C2232: ->JNIEnv_::GetIntField: левый операнд имеет тип "struct", используйте "."
c:\documents and settings\admin\мои документы\visual studio 2010\projects\temp\temp\main.cpp(15): error C2819: тип "JNIEnv_" не имеет перегруженный "operator ->"
          c:\documents and settings\admin\мои документы\visual studio 2010\projects\temp\temp\jni.h(782): см. объявление "JNIEnv_"
          возможно, имеется в виду "."
c:\documents and settings\admin\мои документы\visual studio 2010\projects\temp\temp\main.cpp(15): error C2232: ->JNIEnv_::SetIntField: левый операнд имеет тип "struct", используйте "."
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.05.2013, 18:55     Интеграция кода c++ в java
Посмотрите здесь:

C++ Перенос кода с java на с++
Перевод кода с Java на С++ C++
C++ Интеграция паскаля в c++
Конвертация кода из с++ в java C++
C++ Перевод кода с Java
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
15.05.2013, 20:45     Интеграция кода c++ в java #2
Why so seriouS, пишете длл-ку. Экспортируете из нее функции. Затем подключаете ее(как в джава это делается - не знаю.) Поэтому вам в раздел джава нужно.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
15.05.2013, 20:52     Интеграция кода c++ в java #3
Вот статейка на хабре на эту тему.
Why so seriouS
 Аватар для Why so seriouS
44 / 44 / 1
Регистрация: 12.03.2013
Сообщений: 167
15.05.2013, 21:08  [ТС]     Интеграция кода c++ в java #4
Цитата Сообщение от go Посмотреть сообщение
Why so seriouS, пишете длл-ку. Экспортируете из нее функции.
Вот как раз вот это и должно быть dll.
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include "A.h"
#include "jni.h"
 
JNIEXPORT void JNICALL Java_A_show(JNIEnv *env, jobject obj)
{
    jclass cls;
    jfieldID fid;
    jint i;
    cls = (*env)->GetObjectClass(env,obj);
    fid = (*env)->GetFieldID(env,cls,"i","I");
 
    i = (*env)->GetIntField(env,obj,fid);
    std::cout<<"i = "<<i;
    (*env)->SetIntField(env,obj,fid,2*i);
    std::cout<<std::endl<<"i = "<<i;
}

Но почему-то компиляция не проходит, сами видите сколько ошибок..
Yandex
Объявления
15.05.2013, 21:08     Интеграция кода c++ в java
Ответ Создать тему
Опции темы

Текущее время: 22:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru