在 c++ 中创建 dll 并在 delphi 中调用的标准方法
Standard method for creating dll in c++ and calling in delphi
我正在寻找正确的方法来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
属性使用正确的导出名称。
相关文章:
- 将手写循环转换为标准库调用
- C++:带有大括号初始化列表的函数调用表达式 - 标准是否规定在单个元素列表的微不足道的情况下忽略大括号?
- 该标准是否说明了例外和不同调用约定的共存
- 在 c++ 中创建 dll 并在 delphi 中调用的标准方法
- C++ 线程时出错,标准::调用:
- 在使用标准向量函数时引发'std::bad_alloc'实例后调用的终止
- 在 MASM 中调用标准库函数
- 从 ASM 调用C++代码中标准库的链接
- 如何查看我从 c++ 标准库中调用了哪些函数?
- 包装标准::线程调用函数
- C 标准的哪一部分涵盖通过空指针调用方法
- C++17标准对在nullptr上调用delete有何规定
- 重定向标准输出时调用 dup2 失败
- 是否可以保证C++标准库容器调用可替换的新功能
- 修复此标准::异步调用
- 生成标准输出仅在 4098 字节输出后调用
- 通过引用查找调用范围的标准引用是什么
- forward_list,设置,列表等如何调用标准::分配器
- 调用标准::排序
- 如何从模板化的流操作符中调用标准流操作符