Re[2]: Fortran and C++
От: Nondefine  
Дата: 25.05.02 14:01
Оценка:
Здравствуйте Kaa, Вы писали:

Kaa>Здравствуйте Nondefine, Вы писали:


N>>Есть такая проблема. В фортрановском файлике определена функция:

N>>INTEGER*4 function my()
Kaa>...
N>>Потом ее нужно вызвать из сишного:
N>>extern int __stdcall my();

N>>В результате при линковке всего этого дела в VC 6.0 с встроенным Compac Visual Fortran 6.1 получаю unresolved external _my.


N>>Как с этим бороться?

Kaa>Ответа я не знаю. Сразу говорю. Но можно попытаться.

Kaa>Возможно, дело в декорировании имен. Либо в несоответствии соглашений о вызовах. В первом случае ни в одном из прилинкованных obj-файлов не будет найдена функция, требуемая С-шным компилятором. (можно поискать любым текстовым редактором соответствие)


Kaa>Можно попытаться посмотреть (в map-файле), во что преобразуется имя my. Возможно, поможет вставка "C" между extern и int:

Kaa>
Kaa>extern "C" int __stdcall my();
Kaa>


Kaa>Возможно, что и не поможет. Если точно не известно, что фортранные функции имеют соглашение о вызовах __stdcall, то можно попробовать __cdecl.


Известно точно (описано в MSDN), что фортрановские функции, вызываемые из С, должны декларироваться с __stdcall. Но как ни странно и мсдеэновский сампл тоже не линкуется.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.