在 c++ 中创建 dll 并在 delphi 中调用的标准方法

Standard method for creating dll in c++ and calling in delphi

本文关键字:调用 标准 delphi 方法 并在 c++ 创建 dll      更新时间:2023-10-16

我正在寻找正确的方法来C++中创建DLL并在Delphi中调用它。我将 CodeBlocks 用于 DLL 和 Delphi RAD Studio 10.2。

我的C++标头和源代码用于生成 DLL,如如何在 C++ 中创建 dll 以在 C# 中使用中所述,如下所示:

主:

#ifndef MATH_HPP
#define MATH_HPP
extern "C"
{
__declspec(dllexport) int __stdcall math_add(int a, int b);
}
#endif 

主 :

#include "main.h"
int __declspec(dllexport) __stdcall math_add(int a, int b)
{
return a + b;
}

CodeBlocks中的这段代码构建math_dll.dll没有任何错误。

在德尔福中调用 DLL:

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

但是当我运行 Delphi 并调用此函数时,出现以下错误:

"在动态链接库math_dll.dll中找不到过程入口点math_add">

我的代码的哪一部分是错误的?

__stdcall调用约定的默认名称重整为_<name>@<bytes_in_arguments>。 因此,您的 DLL 函数很可能被导出为'_math_add@8',而不是像您期望的那样'math_add'。 使用像 PEDUMP 这样的工具来验证这一点。

您可以在编译 DLL 时使用.DEF文件来更改导出的名称,也可以更新 Delphifunction声明以对name属性使用正确的导出名称。