Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];

Вниз

вопрос знатокам фортрана   Найти похожие ветки 

 
ghg ©   (2004-09-15 12:01) [0]

на фортране написана dll

что хочется:
на вход к ней поступает из дельфи объект содержащий длину массива и дин.массив (ну или указатели на дин.массив)

вопрос: как описать в фортране поступающий на вход объект

  type datas
   integer*4 NQ
   real*8 XRC(1:NQ)
  END type
так не компиляется

  type datas
   integer*4 NQ
   pointer pXRC
  END type
так тоже


 
Pul   (2004-09-15 14:51) [1]

Цитата 1
>> на фортране написана dll

Цитата 2
>> так не компиляется

DLL уже написана, осталось только разобраться как ее откомпилировать


 
ghg ©   (2004-09-15 15:43) [2]

dll написана и работает когда в объекте нет указателей и массивов

вопрос в том как вставить в объект еще и массив или указтель на массив и чтобы все работало

кто нибудь работал в фортране с записами, структурами, type-ми?


 
MBo ©   (2004-09-21 14:16) [3]

http://triton.itep.ru/~lyosha/Articles/LanguageBarrier.html


 
MBo ©   (2004-09-21 14:25) [4]

http://www.nag.co.uk/numeric/BorlandDelphi.asp
http://www.nag.co.uk/doc/inun/fl20/dll4zl/un.html#Delphi


 
ghg ©   (2004-09-21 15:16) [5]

2 Mbo
ничего нового для себя не узнал
во всех этих примерах в качестве параметров импортируемых из фортрана процедур выступают статические массивы

кроме того, этих параметров очень много, что на мой взгляд очень неудобно

а хотелось бы на вход расчетной процедуры в DLL подать объект который всё это большое количество параметров содержит в себе (и в частности ими могут быть дин.массивы)

вот по этому поводу что-нибудь можно узнать? Вы это делали сами?


 
Amoeba ©   (2004-09-21 15:29) [6]


> а хотелось бы на вход расчетной процедуры в DLL подать объект
> который всё это большое количество параметров содержит в
> себе (и в частности ими могут быть дин.массивы)

А с чего ты решил, что FORTRAN эти вещи обязан поддерживать?


 
MBo ©   (2004-09-21 15:30) [7]

>подать объект
смущает использование термина объект - полагаю, не в смысле экземпляра класса, а все же скорее запись.

>Вы это делали сами?
Давно уже, не знал, как строки передавать - одна из ссылок помогла.

Синтаксис фортрана я уже забыл, конкретных рекомендаций, увы, не дам.


 
ghg ©   (2004-09-21 15:36) [8]

>Amoeba ©   (21.09.04 15:29) [6]
ни с чего
но и не видел нигде чтобы было написано что фортран этого не поддерживает

>MBo ©   (21.09.04 15:30) [7]
да конечно для делфи это запись, в фортране же приходится описывать как type

передать строку это еще не сильная проблема, а вот чтобы эта строка (AnsiString) была внутри record, вот тут у меня сложности


 
KSergey ©   (2004-09-21 15:45) [9]

> [8] ghg ©   (21.09.04 15:36)
> передать строку это еще не сильная проблема, а вот чтобы
> эта строка (AnsiString) была внутри record, вот тут у меня
> сложности

По-моему, передавать куда-либо дельфийские строки - неверный подход. Равно как (тем более) пытаться их принимать.
Просто потому, что формат их недокументирован (если не заблуждаюсь; т.е. найти его описание -  не проблема, конечно, но...)
А если и документирован - фортран-то про них все равно нифига не знает по определению.
Так что тут единственно верный путь по-моему - строки фиксированной длины, либо PChar.


 
ghg ©   (2004-09-21 15:52) [10]

>KSergey ©   (21.09.04 15:45) [9]
строки меня мало интересуют, мне дин.массивы интересны

просто если суметь сделать со строкой Ansi, то тем же менером можно и с дин.массивом обойтись


 
KSergey ©   (2004-09-21 15:58) [11]

Ну елки...
В моем посте меняем "строки" на "дин. массивы" - и тоже самое читаем!

Для массива - можно передать указатель на первый элемент (это указатель на память где он лежит получится), а так же - кол-во элементов. Вот и все. Аналоги в фортране, уверен, найти можно. Смотреть сейчас лень.

Только вот вопрос: вы хотите дин. массив просто передать и попользовать данные из него или записать новые не меняя длину, или прямо на ходу менять длину дин. массива в фортран проге? Второе, однако, никак не получится, уверяю. Разве что перепишете менеджер память в фортране на манер дельфийского sharemem.dll, либо научитись ее пользовать... Но что-то в этом подходе все равно не верно...


 
ghg ©   (2004-09-21 16:12) [12]

>KSergey ©   (21.09.04 15:58) [11]

"Для массива - можно передать указатель на первый элемент (это указатель на память где он лежит получится), а так же - кол-во элементов. Вот и все. Аналоги в фортране, уверен, найти можно. Смотреть сейчас лень."
это все понятно. но как это реализовать? я попробовал, у меня не получилось найти аналоги.

"вы хотите дин. массив просто передать и попользовать данные из него"
вот этого и хочу, но чтобы эти массивы были внутри record-а, который подаем как входной параметр


 
KSergey ©   (2004-09-21 16:19) [13]

> "вы хотите дин. массив просто передать и попользовать данные
> из него"
> вот этого и хочу, но чтобы эти массивы были внутри record-а,
> который подаем как входной параметр

Увы, невозможно.
В рекор просто покласть указатель на начало массива и жлину - вот и все.
К стати, открою секрет: в дельфи на самом деле это так и есть. Вот. Только там не просто указатель, а может какая служебная еще инфа лежит- но это уже детали, мы ее тоже по сути ложим - см. про длину.


 
ghg ©   (2004-09-22 06:13) [14]

:)
и так тоже пробовал. нифига не получается. в фортране работа с указателями как-то не очень понятно.
если можешь что-то посоветовать то завтра в аське с тобою свяжусь.



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.034 c
14-1095100742
Knight
2004-09-13 22:39
2004.10.10
Банк идей...


3-1094652066
Mefodiy
2004-09-08 18:01
2004.10.10
Ошибка "Invalid file name" при SQL запросе


14-1095630126
123
2004-09-20 01:42
2004.10.10
Автомобили.


1-1096117057
Nils
2004-09-25 16:57
2004.10.10
Нужен пример работы с TMemIni?


14-1095502426
Программер_
2004-09-18 14:13
2004.10.10
Почему много кратный вызов SetWindowRgn Вызыват неправильную





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский