![]() |
|
|
![]()
|
|
| nikmixtape |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 24.3.2010 Репутация: нет Всего: нет |
Нужен дельный совет по поводу DLL. Уже всё перебрал
Есть программа: program alfa ... ... ... ... call betta(.....) !DEC$ ATTRIBUTES DLLIMPORT :: betta .... ... ... end Делаю DLL из subroutine betta которая выгледит примерно так: subroutine betta(....) !DEC$ ATTRIBUTES DLLEXPORT :: betta ...... ...... ...... call fun(f,x) ....... ....... ...... end subroutine betta subroutine fun(f,x) ... f=x**2 ... end subroutine fun(f,x) В выше схематично показанном коде функция используется (call fun) в программе из которой делаю DLL. В этом то и беда!!!!! program alfa ... ... ... ... call betta(.....) !DEC$ ATTRIBUTES DLLIMPORT :: betta .... ... ... end subroutine fun(f,x) !Записана функция f=x**2 end subroutine fun(f,x) DLL из subroutine betta: subroutine betta(....) !DEC$ ATTRIBUTES DLLEXPORT :: betta ...... ...... ...... call fun(f,x) ....... ....... ...... end subroutine betta Компилятор пишет что нужно подключить fun Говорят можно сделать это через callback.....Подскажите если это возможно. Да и вообще возможно ли это???.....Дайте хоть маленький намёк. |
|||
|
||||
| FCM |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.3.2009 Репутация: 8 Всего: 9 |
Пробовал задавать интерфейс-блоки с прототипами?
DLL:
Это сообщение отредактировал(а) FCM - 25.3.2010, 12:44 |
||||
|
|||||
| nikmixtape |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 24.3.2010 Репутация: нет Всего: нет |
R[subroutine GLOBOPT(nsum,an1,bw1,i081,iz,optx,optf,x,kn,Fkm)
!DEC$ ATTRIBUTES DLLEXPORT :: GLOBOPT INTERFACE SUBROUTINE g(nsum,x,fkm,kn) REAL, INTENT(IN) :: x !текущий x INTEGER, INTENT(IN) :: nsum ! количество неизвестных в уранении REAL, INTENT(IN) :: kn ! не стоит обращать внимание, просто домножается функция на ! kn - короче коэффициент шасштабирования REAL, INTENT(OUT) :: Fkm !значение функции END SUBROUTINE g END INTERFACE REAL, INTENT(IN) :: X INTEGER, INTENT(IN) :: nsum REAL, INTENT(IN) :: kn REAL :: Fkm do i=1, nsum call fw(nsum,i,x,ico,fg,kn) end do ...... do i=1, nsum call fww(nsum,x,ico,fkm,kn) end do ...... end subroutine fw(nsum,x,ico,fg,kn) !одна из обслуживающих подпрограмм просто избавлялся от комонов dimension fg(20),x(100) real kn ico=ico call g(nsum,x,fkm,kn) fg(i)=fkm return end subroutine fww(nsum,x,ico,fkm,kn) !одна из обслуживающих подпрограмм dimension x(100) real kn ico=ico call g(nsum,x,fkm,kn) return end] [Linking...Creating library Debug/INTER2.lib and object Debug/INTER2.exp 12.obj : error LNK2001: unresolved external symbol _G@16 Debug/INTER2.dll : fatal error LNK1120: 1 unresolved externals Error executing link.exe. ] Опять не видет подпрограмму G Мож и я конечно нахимичел, проверял раз 50 |
|||
|
||||
| FCM |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.3.2009 Репутация: 8 Всего: 9 |
Непонятно, где у тебя находятся fw, fww - в dll или где-то еще.
Если g вызывается в них, там ее интерфейс и задавай. (Да и сами fw, fww не совсем понятны.) Писать код следует в одном стиле, желательно не использовать неявную типизацию (см. IMPLICIT NONE) и каждый параметр подпрограмм четко прописывать. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Fortran | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |