![]() |
|
![]() ![]() ![]() |
|
euph0ria |
|
|||
Unregistered |
В в функцию dll-модуля, написанного на Фортране, из с-программы передается указатель на функцию.
Вопрос: как в фотране объявить указатель на функцию (например, типа void fn(char* psz);) и вызывать ее через него после его инициализации? Если же такое сделать принципиально невозможно, то как лучше здесь выкрутиться, чтобы можно было передавать строки в с-клиент? Заранее спасибо;) Это сообщение отредактировал(а) euph0ria - 30.11.2005, 05:41 |
|||
|
||||
Cr@$h |
|
||||
![]() Исследователь ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1693 Регистрация: 3.4.2005 Где: Санкт-Петербург, Россия Репутация: 1 Всего: 41 |
Посмотри пример использования callback-функции.
Callback-функциями называют те, которые ты передаешь в dll-процедуры как параметры. Пусть у нас есть процедура в Dll, написанная на фортране:
Здесь я использовал директивы: STDCALL -- для выполнения стандратных соглашений о вызовах, DECORATE -- компилятор автоматически думает, ставить ли перед именем процедуры _, ALIAS -- задает имя процедуры, под которым оно будет храниться в Dll, с учетом уже регистра. Сама Callback-функция описывается в интерфейсе. Вот как обращаться к такой функции из C++:
В extern объявляю прототип вызываемой Dll-функции. Обрати внимание, как там описана функция-параметр. Затем идет пример функции-параметра и пример вызова. И везде указания на стандартное соглашение о вызовах. В твоем случае думаю, что могут возникнуть сложности с передачей самих строк как параметров. Ведь фортран будет использовать функцию-параметр и при ее вызове подставлять какую-то свою строку, в своем понятии. Если получалось просто строки передавать, то и с их передачей в callback-функции сложностей не должно возникнуть. Это пример работал у меня на Intel Fortran Compiler 9.0 и Visual Studio 2003 (C++). Некоторые вопросы можно посмотреть в спец. главе хелпа к указанному Фортрану. Я работал в области многоязыкового программирования. Если возникнут сложности -- пиши. ![]() ![]() Прошу прощения, что так поздно отвечаю -- почему-то оповещение для этой темы не пришло на мыло. ![]() |
||||
|
|||||
mistral |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 22.12.2007 Репутация: нет Всего: нет |
а как выглядит ![]() ![]() |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Fortran | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |