Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.20;
Скачать: CL | DM;

Вниз

экспорт double в dll на фортране   Найти похожие ветки 

 
ghg ©   (2004-06-04 09:46) [0]

имеем следующее объявление процедуры

procedure LINE_QQ(NAB : integer; current : double); stdcall; external "line_q.dll";

вот так ее вызываем

line_qq(NAB, current);

вот что написано в фортране

subroutine Line_qq(nab,xm)

 ! Expose subroutine Line_qq to users of this DLL
 !
 !DEC$ ATTRIBUTES DLLEXPORT::Line_qq
 !DEC$ ATTRIBUTES VALUE::nab
 
 INTEGER*4 NAB
 REAL*8 DAB

и далее идет тело этой самой процедуры

так вот после входа в процедуру в dll имею правильное значение для NAB и Undefined pointer для DAB
то есть параметр типа double не передается правильно внуть процедуры в dll
вопрос: почему это происходит и что делать?


 
ghg ©   (2004-06-04 09:53) [1]

все вопрос снят

нужно так

Pdouble=^double;

procedure LINE_QQ(NAB : integer; current : Pdouble); stdcall; external "line_q.dll";

line_qq(NAB, @current);



 
Digitman ©   (2004-06-04 10:03) [2]

насколько мне помнится, ВСЕ факт.параметры в Фортран-процедуру должны передаваться по ссылке

т.е. либо

NAB : Pinteger; current : Pdouble

либо

var NAB : integer; var current : double


 
ghg ©   (2004-06-04 10:05) [3]

а почему работает с целым, а с double не работает?
procedure LINE_QQ(NAB : integer; current : Pdouble); stdcall; external "line_q.dll";


 
evvcom ©   (2004-06-04 10:07) [4]

Причем типы PInteger и PDouble уже описаны в System, поэтому описывать их еще раз излишне.


 
Anatoly Podgoretsky ©   (2004-06-04 10:07) [5]

ghg ©   (04.06.04 10:05) [3]
Тебе только кажется что работает, или у тебя неправильный Фортран, Фортран от Микрософт примает только ссылки.


 
ghg ©   (2004-06-04 10:10) [6]

:))
ну какой Fortran правильнее это вопрос
у меня Compaq Visual Fortran 6

и все таки не понятно почему таки работает с integer


 
Anatoly Podgoretsky ©   (2004-06-04 10:15) [7]

Спецификацию этого Фортрана смотрел, может у них по другому, не по ссылкам, а по значениям?


 
ghg ©   (2004-06-04 10:19) [8]

нет не смотрел но надо будет


 
ghg ©   (2004-06-04 10:22) [9]

причем single тоже по значению передается


 
Digitman ©   (2004-06-04 10:24) [10]


> ghg ©   (04.06.04 10:19) [8]


да что там смотреть ? поставь брейкпойнт на строку вызова Фортран-п/программы да пройдись в окне CPU пошагово по первым же маш.инструкциям п/программы ... сразу станет ясно , по ссылке или по значению ожидается тот или иной факт.параметр


 
Digitman ©   (2004-06-04 10:29) [11]


> ghg ©   (04.06.04 10:22) [9]


возможно, в Compaq Visual Fortran 6 есть какие-то опции оптимизатора, которые позволяют при определенных условиях использования результ.кода избежать накл.расходов ссылочной передачи ...


 
Anatoly Podgoretsky ©   (2004-06-04 10:33) [12]

ghg ©   (04.06.04 10:19) [8]
А как же ты пишешь, если не знаешь как передавать параметры


 
ghg ©   (2004-06-04 10:52) [13]

>Anatoly Podgoretsky ©   (04.06.04 10:33) [12]
:)
наугад


 
Anatoly Podgoretsky ©   (2004-06-04 10:55) [14]

ghg ©   (04.06.04 10:52) [13]
Тоже метод, зотя очень чреватый. Не проще спецификацию посмотреть?


 
MBo ©   (2004-06-04 11:54) [15]

У тебя же написано:
> !DEC$ ATTRIBUTES VALUE::nab
Значит, первый параметр передается по значению, а вот о втором ничего не пишется, что позволяет предположить, что он передается, как обычно в Фортране, по ссылке, т.е. Var Current


 
ghg ©   (2004-06-04 12:02) [16]

спасибо всем за ответы



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

Текущий архив: 2004.06.20;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.053 c
6-1082204025
andrysha
2004-04-17 16:13
2004.06.20
как отправить письма через прокси UserGate


3-1085631099
Litr
2004-05-27 08:11
2004.06.20
Поиск


6-1082858101
FatBase
2004-04-25 05:55
2004.06.20
Отправка почты: как всё объединить?


10-1013415077
OLEGator
2002-02-11 11:11
2004.06.20
Провйдер не передает более 50-ти полей


14-1086056513
try
2004-06-01 06:21
2004.06.20
JEDI компаненты