Можно ли объявить внешнюю функцию без предоставления тела, а затем определить ее в другой DLL?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Можно ли объявить внешнюю функцию без предоставления тела, а затем определить ее в другой DLL?

Сообщение Anonymous »

Я работаю над проектом C++, в котором хочу объявить функцию в одной DLL, но определить ее в другой. В частности, я хочу объявить функцию extern без предоставления тела (например, int MyFunction(); без { return 0; ), а затем предоставить ее фактическую реализацию в другой DLL. .
Возможно ли это, и если да, то как правильно с этим справиться?
Вот упрощенный пример того, что я думаю. пытаюсь достичь:

Код: Выделить всё

// Header file (in DLL A)
extern int MyFunction();  // Declaration without a body
Затем в другой DLL (DLL B):

Код: Выделить всё

// Source file (in DLL B)
int MyFunction() {
return 42;  // Actual implementation
}
Я использую Visual Studio 2022, CMake и C++23.

Что я пробовал?
Я объявил функцию как extern в одной DLL, не предоставляя тело, и попытался определить ее в другой DLL. Я ожидал, что компоновщик разрешит функцию в процессе сборки.

Чего я ожидал?
Я ожидал, что функция будет корректно разрешаться в разных DLL, что позволит связать объявление в одной DLL с определением в другой.

Что на самом деле произошло?
Однако компоновщик выдал ошибку, указывающую, что функция не найдена, хотя я определил ее в другой DLL. Я не уверен, что пропустил конкретный шаг настройки для перекрестного связывания DLL.

Подробнее здесь: https://stackoverflow.com/questions/790 ... -then-defi
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»