- Отметить как новое
- Закладка
- Подписаться
- Отключить
- Подписка на RSS-канал
- Выделить
- Печать
- Сообщить о недопустимом содержимом
.
use kernel32
pointer (p,DefineProblem300)
! Declare an interface block to the routine to be called.
interface
Subroutine DefineProblem300(FName,IE,ErrorMsg)
!DEC$ ATTRIBUTES DLLIMPORT:: DefineProblem300
character(80) FName, ErrorMsg
integer(4) :: IE
end
p = loadlibrary("e:/test1/blm.dll")
if (p == 0) then
type *, "Error occurred opening blm.dll"
type *, "Program aborting"
goto 1000
endif
q1 = getprocaddress(p, "DefineProblem300")
if (q1 == 0) then
type *, "Error occurred finding DefineProblem300 in blm.dll"
type *, "Program aborting"
goto 1000
endif
!
strDir = "e:/test1/dll.dat"
call DefineProblem300(strDir,IE,ErrorMsg)
....
Message Edited by orangecccc on 04-05-200603:22 PM
Ссылка скопирована
- Отметить как новое
- Закладка
- Подписаться
- Отключить
- Подписка на RSS-канал
- Выделить
- Печать
- Сообщить о недопустимом содержимом
Also, do not use DLLIMPORT on the interface to a routine you access through LoadLibrary/GetProcAddress. You have not declared q1.
- Отметить как новое
- Закладка
- Подписаться
- Отключить
- Подписка на RSS-канал
- Выделить
- Печать
- Сообщить о недопустимом содержимом
Steve,
Your suggestion was very helpful. Now the DLL was loaded.
But when I debugged the program, I've got an error 'Unhandled exception in test.exe (BLM.DLL): 0xC0000005:Access Violation' on the call statement (call DefineProblem300(strDir,IE,ErrorMsg)).' Do you have any idea for the error?
How can I declair q1?
The dll.dat is input data for the DLL. Do you think my program is O.K?
Thank you for your help again.
Message Edited by orangecccc on 04-06-200609:44 AM
Message Edited by orangecccc on 04-06-200609:47 AM
- Отметить как новое
- Закладка
- Подписаться
- Отключить
- Подписка на RSS-канал
- Выделить
- Печать
- Сообщить о недопустимом содержимом
pointer (p,DefineProblem300)
with:
pointer (q1,DefineProblem300)
integer(int_ptr_kind()) p
- Отметить как новое
- Закладка
- Подписаться
- Отключить
- Подписка на RSS-канал
- Выделить
- Печать
- Сообщить о недопустимом содержимом
Steve,
When I changed my code from your suggestion, I've got an compile error as follows:
Error: Multiple declaration of a DEC Fortran pointee.[DEFINEPROBLEM300]
pointer (q1,DefineProblem300)
- Отметить как новое
- Закладка
- Подписаться
- Отключить
- Подписка на RSS-канал
- Выделить
- Печать
- Сообщить о недопустимом содержимом
- Отметить как новое
- Закладка
- Подписаться
- Отключить
- Подписка на RSS-канал
- Выделить
- Печать
- Сообщить о недопустимом содержимом
Thank you Steve.
Please advise me how to link(?) the DLL and input data (dll.dat). Please see my Fortran code in my previous message. I'm almost getting there. Thanks,
Message Edited by orangecccc on 04-06-200611:18 AM
- Отметить как новое
- Закладка
- Подписаться
- Отключить
- Подписка на RSS-канал
- Выделить
- Печать
- Сообщить о недопустимом содержимом
- Отметить как новое
- Закладка
- Подписаться
- Отключить
- Подписка на RSS-канал
- Выделить
- Печать
- Сообщить о недопустимом содержимом
Message Edited by orangecccc on 04-06-200604:05 PM
- Отметить как новое
- Закладка
- Подписаться
- Отключить
- Подписка на RSS-канал
- Выделить
- Печать
- Сообщить о недопустимом содержимом
- Отметить как новое
- Закладка
- Подписаться
- Отключить
- Подписка на RSS-канал
- Выделить
- Печать
- Сообщить о недопустимом содержимом
Steve,
Here is the dll file as an attached. Could you check what I have a problem?
When I debugged the code, the program was stopped the following line:
call DefineProblem300(strDir,IE,ErrorMsg)
This call is to read the input data file, *.dat. Many thanks,
Message Edited by orangecccc on 04-06-200604:14 PM
Message Edited by orangecccc on 04-07-200610:22 AM

- Подписка на RSS-канал
- Отметить тему как новую
- Отметить тему как прочитанную
- Выполнить отслеживание данной Тема для текущего пользователя
- Закладка
- Подписаться
- Страница в формате печати