• Как сделать правильно?

    TopMetaFizick
    @TopMetaFizick Автор вопроса
    Евгений Шатунов, я не оправдываюсь, тут понятно что я полез толком не понимая куда, вот теперь плачу за это.
  • Как сделать правильно?

    TopMetaFizick
    @TopMetaFizick Автор вопроса
    Евгений Шатунов, ну я с вами полностью согласен. Но немного не та ситуация. Просто у меня до сдачи проекта в университет осталось мало времени. И меня не кто не заставлял объединять JAVA и C++. И теперь получается так. Что переделывать все с нуля(без использования java) у меня нет времени, изучить JNI тоже не успею, работы сделано 90%, и поэтому я спрашиваю, ибо на это времени уходит мало. Вот я хочу закончить проект, сдать его, и уже после этого сесть и в деталях изучить JNI, и то что у меня вызывало вопросы в процессе создания моего проекта.
  • Как сделать правильно?

    TopMetaFizick
    @TopMetaFizick Автор вопроса
    res2001, результат не массив, массив -входной параметр. С которым у меня ничего не получается.
  • Как сделать правильно?

    TopMetaFizick
    @TopMetaFizick Автор вопроса
    res2001, я просто из Java запишу массив в файл, передам управление в С++, там считаю массив с файла, проведу вычисления , запишу результаты в другой файл, передам управление обратно java, там опять же считаю результат с файла и выведу в программе.
  • Как сделать правильно?

    TopMetaFizick
    @TopMetaFizick Автор вопроса
    res2001, да , студия. Господи , столько проблем из-за компилятора?
  • В чем ошибка кода?

    TopMetaFizick
    @TopMetaFizick Автор вопроса
    res2001, я пробовал, он все равно говорит что это не константа
  • Как сделать правильно?

    TopMetaFizick
    @TopMetaFizick Автор вопроса
    res2001,
    #include "stdafx.h"
    #include <stdio.h>
    #include <locale.h>
    #include <iostream>
    #include <fstream>
    using namespace std;
    int main()
    {
    	int a = 2;
    	const int b = a;
    	int v[b];
    	cout << b << "\n";
    
        return 0;
    }


    ошибка при компиляции, b не является константой, значит мой код выше не рабочий. Ибо он не создает константу.
  • Как сделать правильно?

    TopMetaFizick
    @TopMetaFizick Автор вопроса
    Игорь, да , но суть в том что а появляется раньше. И мне нужно создать сonst b со значением а. Именно в этом порядке. Сначала создается а а уже после создается const b и как-то нужно присвоить ей то же значение что и а.
  • Как передать массив из java в c++?

    TopMetaFizick
    @TopMetaFizick Автор вопроса
    Евгений Шатунов, да я читал, и на изучение я потрачу много времени, поэтому нужно сначала закончить проект, а после я обязательно все детально изучу.
  • В чем ошибка кода?

    TopMetaFizick
    @TopMetaFizick Автор вопроса
    res2001, хм, не заметил, но это не меняет сути. Подскажите как мне из числа SIZE сделать константу (точнее не из него константу, а создать новую переменную, к примеру const int y и поместить сюда значение из SIZE? SIZE не константа, поэтому просто прировнять я не могу. )
  • В чем ошибка кода?

    TopMetaFizick
    @TopMetaFizick Автор вопроса
    res2001, Т.е. ошибок никаких нет, и без java все работало. Я только поменял статичные массивы на динамические. Из java все передается без ошибок. Но с++ не записывает данные в файл( 1 функция), хотя код был рабочий..
  • В чем ошибка кода?

    TopMetaFizick
    @TopMetaFizick Автор вопроса
    res2001, ошибка при передачи массива в функцию. Я проверял.
    Я где-то накасячил с динамическим массивом когда принимал его в первой функции.
  • Как передать массив из java в c++?

    TopMetaFizick
    @TopMetaFizick Автор вопроса
    Сергей Горностаев,
    #include "my_mega_pack_NativeCallsClass4.h"
    #include <stdio.h>
    #include <locale.h>
    #include <iostream>
    #include <fstream>
    
    using namespace std;
    
    
    int kolvodel(int * poslChis,int SIZE) {
    	int colvo = 0;
    	int colvopr = 0;
    	ofstream of11;
    	of11.open("C:\\Users\\lenovo\\Desktop\\rj\\Лабораторная работа 4\\1 задание\\file11.txt");
    	for (int i = 0; i < SIZE; i++) {
    
    		for (int k = 1; k <= poslChis[i]; k++) {
    			if (k == 1) {
    				of11 << "<" << poslChis[i] << ">  ";
    			}
    			if (poslChis[i] % k == 0) {
    				of11 << k << ",";
    				colvo++;
    			}
    
    		}
    
    		of11 << " " << "number of dividers: " << colvo << " ";
    		if (colvo <= 2) {
    			of11 << "(Simple)";
    			colvopr++;
    		}
    		else {
    			of11 << "(Complex)";
    		}
    		of11 << "\n";
    		colvo = 0;
    	}
    	of11 << "Total prime numbers: " << colvopr << "\n";
    	of11.close();
    	return colvopr;
    
    }
    
    
    JNIEXPORT jint JNICALL Java_my_mega_pack_NativeCallsClass4_lab41
    (JNIEnv * env, jobject obj, jintArray array) {
    
        jsize SIZE = env->GetArrayLength( array);
    	jint* poslChisl = env->GetIntArrayElements( array, NULL);
    	
    	int mk = (poslChisl, SIZE);
    	env->ReleaseIntArrayElements( array, poslChisl, JNI_ABORT);
    	return mk;


    Посмотрите пожалуйста, я не понимаю где ошибка..
    Сюда передается массив из JAVA, далее этот массив идет в функцию, она открывает поток записи и записывает в файл кол-во делителей каждого числа, и определяет простое или комплексное число. Но ничего не работает..
  • Как передать массив из java в c++?

    TopMetaFizick
    @TopMetaFizick Автор вопроса
    Сергей Горностаев, да я нашел где первая ошибка. Когда может понадобится использование С++ и JAva совместно? Просто сейчас я делаю задание для университета ... И не сильно понимаю полезности...
  • Как передать массив из java в c++?

    TopMetaFizick
    @TopMetaFizick Автор вопроса
    Сергей Горностаев,
    JNIEXPORT jint JNICALL Java_my_mega_pack_NativeCallsClass4_lab41
    (JNIEnv * env, jobject obj, jintArray array) {
    
    	jsize SIZE = env->GetArrayLength( array);
    	jint* poslChisl = env->GetIntArrayElements( array, NULL);
    
    	setlocale(LC_ALL, "RUS");
    	
    
    	int mk = kolvodel(poslChisl, SIZE);
    	env->ReleaseIntArrayElements(array, buffer, 0);
    	return mk;
    
    
    };


    C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\xlocale(341): warning C4530: Использован обработчик исключений C++, но семантика уничтожения объектов не включена. Задайте параметр /EHsc
    NativeCallsClass4.cpp(54): error C2664: "int kolvodel(int [],const int)": невозможно преобразовать аргумент 1 из "jint *" в "int []"
    NativeCallsClass4.cpp(54): note: Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
    NativeCallsClass4.cpp(55): error C2065: buffer: необъявленный идентификатор


    Вернулся с чего начал.
  • Как передать массив из java в c++?

    TopMetaFizick
    @TopMetaFizick Автор вопроса
    Сергей Горностаев,
    JNIEXPORT jint JNICALL Java_my_mega_pack_NativeCallsClass4_lab41
    (JNIEnv * env, jobject obj, jintArray array) {
    
    	jsize SIZE = (*env)->GetArrayLength(env, array);
    	jint* poslChisl = (*env)->GetIntArrayElements(env, array, NULL);
    
    	setlocale(LC_ALL, "RUS");
    	
    
    	int mk = kolvodel(poslChisl, SIZE);
    	(*env)->ReleaseIntArrayElements(env, array, buffer, 0);
    	return mk;
    
    
    };


    Все сделал как вы сказали. Но...

    C:\Users\lenovo\Desktop>cl -I"C:\Program Files\Java\jdk-9\include" -I"C:\Program Files\Java\jdk-9\include\win32" -I"C:\Program Files\Java\jdk-9\include\win32\bridge" -LD NativeCallsClass4.cpp -FeNativeCallsClass4
    Оптимизирующий компилятор Microsoft (R) C/C++ версии 19.00.24231 для x64
    (C) Корпорация Майкрософт (Microsoft Corporation).  Все права защищены.
    
    NativeCallsClass4.cpp
    C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\xlocale(341): warning C4530: Использован обработчик исключений C++, но семантика уничтожения объектов не включена. Задайте параметр /EHsc
    NativeCallsClass4.cpp(48): error C2819: тип "JNIEnv_" не имеет перегруженный "operator ->"
    C:\Program Files\Java\jdk-9\include\jni.h(787): note:  см. объявление "JNIEnv_"
    NativeCallsClass4.cpp(48): note: возможно, имеется в виду "."
    NativeCallsClass4.cpp(48): error C2232: ->JNIEnv_::GetArrayLength: левый операнд имеет тип "struct", используйте "."
    NativeCallsClass4.cpp(49): error C2819: тип "JNIEnv_" не имеет перегруженный "operator ->"
    C:\Program Files\Java\jdk-9\include\jni.h(787): note:  см. объявление "JNIEnv_"
    NativeCallsClass4.cpp(49): note: возможно, имеется в виду "."
    NativeCallsClass4.cpp(49): error C2232: ->JNIEnv_::GetIntArrayElements: левый операнд имеет тип "struct", используйте "."
    NativeCallsClass4.cpp(54): error C2664: "int kolvodel(int [],const int)": невозможно преобразовать аргумент 1 из "jint *" в "int []"
    NativeCallsClass4.cpp(54): note: Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
    NativeCallsClass4.cpp(55): error C2819: тип "JNIEnv_" не имеет перегруженный "operator ->"
    C:\Program Files\Java\jdk-9\include\jni.h(787): note:  см. объявление "JNIEnv_"
    NativeCallsClass4.cpp(55): note: возможно, имеется в виду "."
    NativeCallsClass4.cpp(55): error C2232: ->JNIEnv_::ReleaseIntArrayElements: левый операнд имеет тип "struct", используйте "."
    NativeCallsClass4.cpp(55): error C2065: buffer: необъявленный идентификатор
    
    C:\Users\lenovo\Desktop>
  • С какой книги начать изучение xml?

    TopMetaFizick
    @TopMetaFizick Автор вопроса
    Ярослав Иванов, даже если я буду писать под андроид?
  • Для чего используется Java в современном вебе?

    TopMetaFizick
    @TopMetaFizick
    Сергей Горностаев, А как дела с преподавателем/репетитором обстоят, можно ли обойтись без них? Просто в моем университете, на мои вопросы не могут ответить... Отсутствует скилл так- сказать...