У меня есть fortran DLL, построенная в соответствии с соглашением CVF, и мой код на С++, созданный с использованием соглашения о вызовах cdecl, чтобы получить то, что ему нужно, из моей DLL. Я проверил свои файлы obj с кодом С++, и символы '_imp_variable'. Затем в моем fortran dll символ отображается как «переменная». Я получил некоторые ошибки компоновщика (неразрешенный внешний символ _imp_variable), это потому, что С++ ищет '_imp_variable' точно так же, как в моей DLL? Или соглашение о вызовах VS cdecl просто странно добавляет вещи, но знает, что нужно искать «переменную»?
Соглашения о вызовах в Visual Studio
comment
Не имеет ничего общего с соглашениями о вызовах. Ваш код C++ по какой-то причине видит __declspec(dllimport).
- person Hans Passant   schedule 31.08.2012
Ответы (1)
Префикс __imp__
добавляется атрибутом класса хранения __declspec(dllimport)
. Это означает, что объект или функция импортируются из DLL с использованием библиотеки импорта (обычно создается компоновщиком при сборке DLL). Убедитесь, что вы добавили такую библиотеку в свой проект.
Если по неизвестной причине у вас нет источников импорта lib или DLL, посмотрите здесь: http://support.microsoft.com/kb/131313
person
Rost
schedule
30.08.2012
Ok. Теперь это имеет больше смысла, но я убедился, что библиотека была добавлена в мой проект, а ошибки компоновщика все еще там. Я выгрузил dll, файлы obj и все символы там, почему мой компоновщик не может их увидеть?
- person user1496542; 31.08.2012
Проверьте командную строку компоновщика и убедитесь, что библиотека находится здесь по правильному пути.
- person Rost; 31.08.2012
Ага, это я тоже проверил. Я разместил еще один вопрос об архитектуре сборки как на фортране, так и на С++. Может быть поэтому?
- person user1496542; 31.08.2012