| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Fortran > [Interop] Указатель на функцию. |
| Автор: euph0ria 30.11.2005, 04:57 |
| В в функцию dll-модуля, написанного на Фортране, из с-программы передается указатель на функцию. Вопрос: как в фотране объявить указатель на функцию (например, типа void fn(char* psz);) и вызывать ее через него после его инициализации? Если же такое сделать принципиально невозможно, то как лучше здесь выкрутиться, чтобы можно было передавать строки в с-клиент? Заранее спасибо;) |
| Автор: Cr@$h 9.12.2005, 20:47 | ||||
| Посмотри пример использования callback-функции. Callback-функциями называют те, которые ты передаешь в dll-процедуры как параметры. Пусть у нас есть процедура в Dll, написанная на фортране:
Здесь я использовал директивы: STDCALL -- для выполнения стандратных соглашений о вызовах, DECORATE -- компилятор автоматически думает, ставить ли перед именем процедуры _, ALIAS -- задает имя процедуры, под которым оно будет храниться в Dll, с учетом уже регистра. Сама Callback-функция описывается в интерфейсе. Вот как обращаться к такой функции из C++:
В extern объявляю прототип вызываемой Dll-функции. Обрати внимание, как там описана функция-параметр. Затем идет пример функции-параметра и пример вызова. И везде указания на стандартное соглашение о вызовах. В твоем случае думаю, что могут возникнуть сложности с передачей самих строк как параметров. Ведь фортран будет использовать функцию-параметр и при ее вызове подставлять какую-то свою строку, в своем понятии. Если получалось просто строки передавать, то и с их передачей в callback-функции сложностей не должно возникнуть. Это пример работал у меня на Intel Fortran Compiler 9.0 и Visual Studio 2003 (C++). Некоторые вопросы можно посмотреть в спец. главе хелпа к указанному Фортрану. Я работал в области многоязыкового программирования. Если возникнут сложности -- пиши. Прошу прощения, что так поздно отвечаю -- почему-то оповещение для этой темы не пришло на мыло. |
| Автор: mistral 22.12.2007, 10:02 | ||
а как выглядит |