| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Правильно написана процедура для Java native мет.? |
| Автор: LexaL 4.5.2011, 15:51 | ||||||
Вот код процедуры.
Сам native метод:
И его вызов:
|
| Автор: Akella 4.5.2011, 20:55 |
| и что? |
| Автор: LexaL 4.5.2011, 21:51 |
| Так правильно ли написана процедура или в ней есть ошибки? |
| Автор: LexaL 4.5.2011, 22:21 |
| Установлена последняя версия JRE, при попытке получить значения из массива выдает ошибку : # # A fatal error has been detected by the Java Runtime Environment: # # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x047d55ac, pid=3960, tid=2520 # # JRE version: 6.0_24-b07 # Java VM: Java HotSpot Client VM (19.1-b02 mixed mode, sharing windows-x86 ) # Problematic frame: # C [LoadLanImpl.dll+0x55ac] # # An error report file with more information is saved as: # F:\workspace\CreateHyper\hs_err_pid3960.log # # If you would like to submit a bug report, please visit: # http://java.sun.com/webapps/bugreport/crash.jsp # The crash happened outside the Java Virtual Machine in native code. # See problematic frame for where to report the bug. # |
| Автор: Akella 5.5.2011, 08:41 |
| Ты же в разделе по Delphi |
| Автор: LexaL 5.5.2011, 09:04 |
| Я знаю, посмотрите на Delphi код правильный ли он? |
| Автор: LexaL 5.5.2011, 11:08 |
| Возникает Access Violation в Delphi коде, в чем может быть причина? |
| Автор: Gwire 5.5.2011, 11:23 |
| Я чего-то не пойму. LexaL, если ты знаешь Java зачем ты используешь неизвесный тебе Delphi. А по поводу правильный/неправильный: - я вижу "stdcall" в коде Delphi, но я понятия не имею как делается стандартный вызов из Java - насколько я могу судить ты нигде не получил указатель на ф-цию "Java_createhypertables_LoadLAN_displayMass". - строка "type mas=array of array of array of JShort;" нерекомендуется в библиотеках выделять память для динамических массивов, которые используются в качестве параметров функций. ("; var data:mas)") Делаешь ф-цию возвращающюю необходимое количество памяти (длины массивов). В главной программе выделяешь (в ней же потом освобождаешь) память (или как в твоем случае устанавливаешь длины массивов). Передаешь в ф-цию "Java_createhypertables_LoadLAN_displayMass" указалель на массив, и она его просто дожна заполнить, без всяких "Setlength". - да и динамические массивы Delphi и Java могу отличатся по своей структуре. Я утверждать не буду, что это именно так, но нужно учесть и такую вероятность, если незнаешь наверняка. |
| Автор: LexaL 5.5.2011, 11:59 |
| Использую Delphi, так как не знаю как в Java открыть и считать данные с многоканального изображения, а в Delphi знаю (код приведен выше). |