问题标签 [stdcall]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
2021 浏览

c - C - 从非托管 DLL 正确导入 stdcall 函数

我正在尝试通过创建一个指定我需要使用的函数的 .def 文件来将非托管 DLL 中的函数导入 C 项目。我正在练习MessageBoxAuser32.dll. 它是一个 stdcall 函数,与其他 WinAPI 函数一样。这是我创建 .def 文件的方法:

然后我像这样从中创建一个 .lib:lib /def:"C:\Path\to\def\user32.def" / out:"C:\path\to\project\user32-mb.lib"它成功地创建了user32-mb.libuser32-mb.exp. 然后,在我的 C 项目中,我执行以下操作:

但是,在链接时,它会给出以下错误:

error LNK2019: unresolved external symbol _MessageBoxA@16 referenced in function _main

但是,当我将 .def 中的声明更改为:

并将我的 C 代码中的函数原型更改cdeclstdcall

EXTERNC __declspec(dllexport) int __cdecl MessageBoxA(void *hWnd, char *lpText, char *lpCaption, int uType); 消息框实际上出现了,但在关闭时,它会抛出一个错误:

Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention. 这表明调用它cdecl也是一个坏主意,因为它stdcall毕竟需要。

问题是,我应该在 .def 文件或我的项目中进行哪些更改以避免这两种错误并stdcall正确导入和调用函数?

0 投票
1 回答
1073 浏览

c++ - 为什么使用 __stdcall 作为函数指针

我在看一些像这里提到的代码:winapi函数的函数指针(stdcall/cdecl)函数指针和调用约定等。

将函数指针的调用类型声明为 有什么需要和好处__stdcall

为什么要声明函数指针的调用类型?

0 投票
2 回答
1180 浏览

c++ - 将 VB6 布尔变量传递给 C++ DLL 中的 stdcall 函数

我正在寻找将 VB6 布尔变量传递给函数(用 C++ 编写,stdcall)的最安全的方法。

C++ 函数将使用此 VB6 变量设置结构的“bool”变量。

我试过在 C++ 中这样声明它:

stSetParameter 声明为

DLL_sSetting 声明为

但是,我无法让它工作。

我在 VB6 中使用

但它没有按预期工作,我猜 VB6 布尔值在某处丢失或被错误地转换。

我目前正在使用 VB6 Boolean、C++ BOOL 和 C++ bool。我知道这不太好,但我看不到任何其他方式。

有人发现我的代码有问题吗?

0 投票
1 回答
3383 浏览

c++ - Error converting void(__cdecl MyClass::*)() to void *

I am trying to link to an external library in my QT application. The external library has a header file with the following relevant code I'm trying to call:

In the demo C++ program provided, which has no problems compiling, the following relevant code is:

I am trying to incorporate this code into my QT application, but getting problems. In my mainwindow.cpp file:

The error I'm getting is:

What do I need to do? Thanks.

0 投票
1 回答
215 浏览

assembly - 在 x86 上的 winapi __stdcall 中,第二个参数在哪个寄存器中?

在 x86 上的 winapi __stdcall 中,第二个参数存储在哪个寄存器中?(ECX?)-另外,我知道在哪里可以找到有关此的一些文档吗?

0 投票
2 回答
790 浏览

c - 在动态链接库中找不到过程入口点 axiom_attribute_create

我有一个 c 项目,我想用 MinGW 在 CodeBlocks 中编译它。我试图链接它所需的库,但我得到了

未定义的参考错误

于是我搜了一下,发现我使用的库是用MVC++编译的,不能和MinGW一起使用。(我不是 c 方面的专家,所以我有点困惑。)我找到了这个链接并按照他们所说的来解决我的问题。

我从原始的axis2c .dll 文件创建了axis2c .a 文件。

  • 我用 reimp 创建了 .def 文件
  • 然后我修改了 .def 文件中的每个 stdcall 函数(我将“_name@ordinal”更改为“name”)
  • 然后我使用 dlltool 创建 .a 文件。

我将 .a 文件链接到我的项目。一切顺利,我可以编译我的项目。但是当我尝试运行它时。我得到这个错误。

在动态链接库中找不到过程入口点 axiom_attribute_create

我已将我的项目包含在此链接中。

我用 MinGW 下载了一个 CodeBlocks。codeblocks-10.05mingw-setup.exe (我猜它使用MinGw32bit)。然后我按照@mikekinghan 所说的步骤设置Build Options。然后我建立了这个项目。我得到了这个错误。我已经将 Axis2c lib 文件夹添加到路径环境中。(我什至按照@mikekinghan 的建议将 axiom.dll 复制到“C:\Windows\SysWOW64”。

这是构建日志:

似乎我把 ../include 放在搜索目录>链接器中是错误的,我修复了这个错误。

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

我建立了项目,然后我得到了这个:

形成@MikeKinghan 试图教我的内容,我现在理解了链接器命令的含义,并且我看到这次链接器设置正确。但为什么它不能正确编译?

0 投票
1 回答
1662 浏览

c# - DllExport 未创建入口点

我正在尝试使用 Robert Giesecke 的“ UnmanagedExports ”nuget 包创建一个 C# 非托管 DLL,但它似乎没有创建任何入口点。

完整代码在这里:

我究竟做错了什么?

澄清:

这是Arma 3 的扩展 DLL,它需要一个名为 " " 的入口点并_RVExtension@12带有签名:

编辑:我在项目设置中将目标平台指定为 x86,但没有运气。

0 投票
1 回答
385 浏览

gnu - 在回调函数上添加 stdcall 会导致参数不匹配 [GNU]

我正在尝试将 stdcall 调用约定添加到我的 GNU 编译的 DLL 中。

这是我的代码:

它被这个函数调用:

在哪里:

问题是它给了我这个注释:

注意:预期为“CTMCashAcceptCallback”,但参数类型为“void (*)(const struct CTMEventInfo, const struct CTMAcceptEvent)”

当我删除 __stdcall 或将其替换为 __cdecl 时,它不会提供该信息。通过 GNU 编译时是否不能使用 stdcall 或者我做的不对?

0 投票
1 回答
1333 浏览

visual-studio-2012 - 混合 cdecl 和 stdcall 调用约定

我已经在 Windows VS2012 (.lib) 上构建了一个静态库,使用 stdcall 约定编译。当我说“已经构建”时,我的意思是不幸的是我无法使用我选择的调用约定来重建它。

是否可以从使用 cdecl 约定编译的代码中调用该库中的函数?或者至少做某种包装?

我不确定这是否可能(在浏览了 SO 之后,我实际上几乎确信这是完全不可能的)但是这里有些人含糊地提到可能有一个 kludge。任何想法 ?

0 投票
3 回答
4965 浏览

assembly - 结构如何在程序集中作为参数传递

结构体如何在汇编中作为参数传递?

由于结构的大小比正常大,各个字段是否按顺序传递?

如果是这样,它们是否像正常参数一样以相反的顺序排列?

cdecl 和 stdcall 之间有什么区别吗?