Стандартный метод для создания DLL в C ++ и вызова в Delphi - PullRequest
0 голосов
/ 16 октября 2019

Я ищу правильный метод для создания DLL в C ++ и вызова его в Delphi. Я использую CodeBlocks для DLL и Delphi RAD Studio 10.2.

Мой заголовок C ++ и исходный код для сборки DLL, как описано в Как создать dll в C ++ для использования в C # следующим образом:

Main.h:

#ifndef MATH_HPP
#define MATH_HPP

extern "C"
{
    __declspec(dllexport) int __stdcall math_add(int a, int b);
}

#endif 

Main.Cpp:

#include "main.h"

int __declspec(dllexport) __stdcall math_add(int a, int b)
{
    return a + b;
}

Этот код в CodeBlocks создает math_dll.dll без ошибок.

Вызов DLL в Delphi:

function math_add(X, Y: Integer): Integer; stdcall; external 'math_dll.dll' name 'math_add';

Но когда я запускаю Delphi и вызываю эту функцию, у меня появляется следующая ошибка:

"точка входа в процедуру math_add не может бытьнаходится в библиотеке динамических ссылок math_dll.dll "

Какая часть моего кода неверна?

1 Ответ

1 голос
/ 16 октября 2019

Имя по умолчанию для именования __stdcall является _<name>@<bytes_in_arguments>. Таким образом, ваша функция DLL, скорее всего, экспортируется как '_math_add@8', а не как 'math_add', как вы ожидаете. Используйте такой инструмент, как PEDUMP, чтобы проверить это.

Вы можете использовать .DEF файл при компиляции DLL для изменения экспортированного имени, или вы можете обновить объявление Delphi function доиспользуйте правильное экспортированное имя для атрибута name.

...