Соглашения о вызовах в Visual Studio

У меня есть fortran DLL, построенная в соответствии с соглашением CVF, и мой код на С++, созданный с использованием соглашения о вызовах cdecl, чтобы получить то, что ему нужно, из моей DLL. Я проверил свои файлы obj с кодом С++, и символы '_imp_variable'. Затем в моем fortran dll символ отображается как «переменная». Я получил некоторые ошибки компоновщика (неразрешенный внешний символ _imp_variable), это потому, что С++ ищет '_imp_variable' точно так же, как в моей DLL? Или соглашение о вызовах VS cdecl просто странно добавляет вещи, но знает, что нужно искать «переменную»?


person user1496542    schedule 30.08.2012    source источник
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
comment
Ok. Теперь это имеет больше смысла, но я убедился, что библиотека была добавлена ​​в мой проект, а ошибки компоновщика все еще там. Я выгрузил dll, файлы obj и все символы там, почему мой компоновщик не может их увидеть? - person user1496542; 31.08.2012
comment
Проверьте командную строку компоновщика и убедитесь, что библиотека находится здесь по правильному пути. - person Rost; 31.08.2012
comment
Ага, это я тоже проверил. Я разместил еще один вопрос об архитектуре сборки как на фортране, так и на С++. Может быть поэтому? - person user1496542; 31.08.2012