XPEHOMETP
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору ESV1987 Цитата: Проблема: перевод подпрограмм на фортране в .dll и затем использование их в Delphi. | Delphi по умолчанию использует свою хитрую систему обмена данных между основной программой и вызываемой подпрограмой (в том числе и внутри dll), которую обычно обзывают Borland fastcall. Нужно указать и при описании фортрановской подпрограммы, и при ее вызове из Дельфи некий одинаковый способ обмена данными, например, cdecl или stdcall. А также не забыть, что Фортран стремится все передавать по ссылке (и получать, соответственно), и правильно прописать это в вызывающей программе. Поскольку прописать это в фортрановской довольно сложно: стандартный механизм появился, кажись, только в Ф2003. Обычно, правда, предполагается, что если фортрановскую подпрограмму объявить как stdcall, то она будет вести себя по умолчанию так, как является обычным для этого механизма обмена данными: передавать массивы и строки по ссылке, а целые и дробные числа - по значению. Правда, есть в Фортране некие нестандартные расширения для того, чтобы показать, как передается переменная, вроде %VAL(а) - переменная а передается по значению. Поддерживается, к примеру, gfortran-ом. И еще такая неприятность: Фортран не различает регистры. В большинстве случаев, если Вы написали название подпрограммы как podprogramma, к примеру, вызывающие Вашу dll программы будут видеть ее как PODPROGRAMMA. ГНУ-тые компиляторы вроде g77 и g95, наоборот, все пишут в нижнем регистре. Так что если такие нюансы правильно утрясти, проблем с процедурой сложения двух чисел быть не должно. Это Вам не массивы в dll передавать, вот там свихнуться можно. У меня передать массив из программы на PowerBASIC в фортрановскую dll получилось только в составе UDT. |