Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.023 c
8-1081227114
freeek
2004-04-06 08:51
2004.06.20
Нарисовать на картинке


14-1086169461
rserg
2004-06-02 13:44
2004.06.20
Корманники и Delphi


6-1083203950
-+= Evgeney =+-
2004-04-29 05:59
2004.06.20
Доступ к программе по сети


6-1082979557
V@LER@N
2004-04-26 15:39
2004.06.20
Помогите с сокетом


1-1085999039
Александр
2004-05-31 14:23
2004.06.20
Тренер




   Наверх