общие блоки, FORTRAN и библиотеки DLL

Я модельер, который программирует... Я бы никогда не назвал себя программистом, но я программирую на C# и на FORTRAN. У меня есть модель FORTRAN, которую я подключил к некоторому коду C# через dll. Я обнаружил, что у меня должен быть общий блок, чтобы хранить переменные в памяти в dll. Я также обнаружил, что не могу использовать более одного оператора включения... мой включаемый файл для общих переменных не помечен. Chapman (2008) «FORTRAN 95/2003 для ученых и инженеров» утверждает: «Немаркированный оператор COMMON никогда не должен использоваться ...».

Как я могу убедиться, что у меня нет поврежденной памяти в моем общем файле? Я думаю, я могу поэкспериментировать, но я надеялся получить дельный совет по этому поводу. Я использую Lahey-F версии 7.2 в Microsoft Visual Studio 2008.

Кто-нибудь, есть мысли?


person DavidAS    schedule 17.08.2010    source источник


Ответы (1)


Как программист, который моделирует то, что я хотел бы знать, именно поэтому Чепмен утверждает, что немаркированный COMMON не следует использовать. Насколько я помню, пустой/безымянный общий блок является глобальным и должен быть определен в основной программе.

Единственный способ убедиться в этом, вероятно, состоит в том, чтобы создать простую библиотеку Fortan DLL, а затем разобрать ее, чтобы увидеть, что она делает с / где она помещает общий блок.

Также было бы полезно, если бы вы могли вставить примеры ошибок и т. д., когда вы пытаетесь использовать именованный файл common. Может оказаться, что есть лучшее решение, когда мы точно поймем, что не работает.

person Richard Harrison    schedule 17.08.2010
comment
Спасибо за публикацию. Да, я согласен с использованием модулей; моя программа построена вокруг модулей. Однако модули (с локальными и глобальными (общедоступными) переменными) не остаются в памяти при использовании в dll. По крайней мере, мне не удалось это продемонстрировать. Если кто-то знает, как сохранить частные и общедоступные переменные в активной памяти в dll, пожалуйста, скажите мне, как это сделать. Документация, на мой взгляд, не демонстрирует этого. - person DavidAS; 17.08.2010
comment
@MSB Спасибо - именно так я помню Fortan 7/IV в целом, за исключением того, что обычно мы использовали COMMON /DATAPOOL/. @David, мой опыт и понимание DLL приводят меня к мысли, что единственный способ решить это - создать небольшой пример DLL и опубликовать его с исходниками, чтобы я мог посмотреть на разборку. - person Richard Harrison; 18.08.2010