![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
DimaKGZ |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 1.4.2004 Репутация: 1 Всего: 1 |
Здравствуйте!
У меня такая проблема Есть некая библиотека на с
на С# вызываю процедуру так
теперь мне надо все это написать на J#
и у меня появляется сообщение об ошибке An unhandled exception of type 'System.Runtime.InteropServices.MarshalDirectiveException' occurred in ConsoleApplication1.exe Additional information: Can not marshal parameter #1: The type definition of this type has no layout information. нет на j# волшебного OUT ![]() что делать?? |
||||||
|
|||||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Дело в том, что J# - суть враппер над Java. Поэтому все возможности языка соответствуют возможностям Java. Если там нет поддержки указателей (ссылок), то нельзя будет написать метод, принимающий аргумент-указатель. И наоборот. Советую задать вопрос в разделе по Java: "Возможно ли использование Си-указателей в JAVA ?", с подробным описанием проблемы, только без ссылок на .NET
![]() -------------------- ![]() |
|||
|
||||
DimaKGZ |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 1.4.2004 Репутация: 1 Всего: 1 |
К сожалению JAVA позволяет передавать параметры только по значению
![]() Если нужно получить несколько значений то приходится извращаться и возвращать или в массиве или в классе - обертке. Но тут .NET ... думал может с помощью хитро приложенного маршалинга можно это реализовать.. поэтому вопрос и был в .net раздел. Си библиотеку переписывать нежелательно.. А заставить работать с J# нужно |
|||
|
||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 9 Всего: 172 |
Я J# не знаю, но разве не должно работать что-то вроде
? -------------------- |
|||
|
||||
DimaKGZ |
|
||||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 1.4.2004 Репутация: 1 Всего: 1 |
да таким образом можно ПЕРЕДАТЬ значение по ссылке
а вот вернуть знаечение не получается.. ![]() |
||||
|
|||||
mr.DUDA |
|
||||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Раз используется .NET, можно обойти проблему следующим образом. Написать на C# класс-обёртку:
Скомпилировав, получаем assembly, которую можно по reference включить в проект на J#. Дальше всё понятно:
Вот тестовый проект, проверял под отладкой - работает: Присоединённый файл ( Кол-во скачиваний: 5 ) ![]() -------------------- ![]() |
||||
|
|||||
DimaKGZ |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 1.4.2004 Репутация: 1 Всего: 1 |
Большое спасибо
![]() Первоначально проект так и выглядел ![]() ![]() Была обертка на с#.. Заказчик захотел избавиться от обертки и портировать код с# на J .. Уговоры и убеждения не помогли.. Хозяин барин.. буду дальше копаться.. Спасибо |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Так портируй весь код на J#, кроме обёртки для вызова native методов. Заказчику наверное важней получить хоть какой-то порт под Java, чем кол-во получаемых DLL.
-------------------- ![]() |
|||
|
||||
DimaKGZ |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 1.4.2004 Репутация: 1 Всего: 1 |
![]() Есть просто большой проект на J#. он "общался" с библиотеками на с++ через обертки на C# . и вот товарищ уважаемый заказчик захотел избавиться от оберток (этот вопрос к нему - зачем?). Вот результаты моих изысканий - на J# нельзя получить параметры (см. первый пост). Кто научит как это можно сделать перед тем "сниму шляпу"... мне это не удалось ![]() переписал библиотеки сишные заточив их вызовы под java |
|||
|
||||
Дрон |
|
||||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 24 Всего: 92 |
Т.е. тема уже не актуальна? Если же всё-таки интересно, то вот то, что я накопал:
Проверить я не могу, ибо в J# не силён. Но оно, как минимум, компилируется ![]() Это сообщение отредактировал(а) Дрон - 10.9.2005, 23:11 -------------------- Да. Именно так. |
||||
|
|||||
Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 24 Всего: 92 |
Хмм... Проверил. Тот же эксепшен.
Зато нашёл другое решение. Работает на ура.
-------------------- Да. Именно так. |
|||
|
||||
DimaKGZ |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 1.4.2004 Репутация: 1 Всего: 1 |
Во истину - кто ищет тот найдет..
выражаю своё уважение тов. Дрону.. действительно работает.. private static native int fnTest(/**@attribute OutAttribute()*/Integer a); - такое видел у Майкрософта в примерах.. только там все относилось к 2005 студии.. у меня в 2003 не работало.. может это баг мелких что атрибут не работает... быть может новый фреймворк уже умеет это делать ![]() спасибо.. находка интересная.. |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |