Текущий архив: 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