问题标签 [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 投票
1 回答
793 浏览

stack - stdcall 和 cdecl 堆栈对齐大小

我有两个问题:

  1. stdcall 调用约定的堆栈对齐是否始终为 4 个字节,或者对于 32 位机器是 4,对于 64 位机器是 8?
  2. cdecl 的堆栈对齐大小是多少?

我正在使用 Microsoft Visual Studio 2010。

0 投票
3 回答
1816 浏览

c++ - __stdcall 函数指针的模板部分特化

上面的代码在 Visual C++ 2010 中给了我以下错误:

如您所见,__stdcall修饰符的问题。这是编译器错误吗?

0 投票
4 回答
13647 浏览

c# - 仅 declspec 和 stdcall 与 declspec

我是 C++ dll 导入主题的新手,可能我的问题很简单,但我在谷歌上找不到。

我有一个非常简单的 C++ win32 dll:

当我从 C# 调用此方法时,我没有任何问题,这里是 C# 代码

正如我所料,输出是:“这是 C# 程序”“嗨”。

现在,如果我将 C 函数的声明更改为:

没有__stdcall,我也没有任何问题,问题是:

我什么时候真的需要 __declspec(dllexport) TYPE __stdcall 什么时候只能使用 __declspec(dllexport) TYPE ?

非常感谢。

0 投票
1 回答
1695 浏览

c++ - VC++ 防止所有符号名称装饰

我正在开发一个 DLL,它将使用 _stdcall 调用转换从另一种语言中使用(因此没有导入库并包括 dll 的头文件)。问题是 VC++ 似乎总是对其导出的符号进行一些名称修饰。我看到的所有引用都说使用 extern "C" 但这似乎仍然给我留下了一个前导下划线和一个 @ 加上导出名称后的一个数字。

最糟糕的一点是在目标语言中加载扩展 dll 的自动方法本质上是“func_name = GetProcAddress(dll,“func_name”)”所以使用未修饰的名称 GetProcAddress 失败,并且使用修饰的名称它抱怨非法变量名称( @ 不允许) :(

如何让 VC++ 导出完全没有名称装饰的东西?

垃圾箱文件

00011366 _test@8 = @ILT+865(_test@8)

0 投票
2 回答
2811 浏览

python - 在 python 中使用 ctypes 调用的函数的正确回调签名是什么?

我必须在 Python 中定义一个回调函数,该函数将从 DLL 中调用。

我尝试了这段代码,它似乎在 Python 2.5 中有效,但在 Python 2.7 中它崩溃了,我认为我做错了什么。

错误在哪里?

注意:该平台仅在 32 位(Windows 和 Python)上运行。DLL 加载成功,并且内部的其他函数在从 Python 调用时也能正常工作。

可在https://github.com/ssbarnea/pyHikvision上找到完整的重现此示例代码- 只需在 py25 和 py27 下运行 Video.py。

0 投票
2 回答
1589 浏览

c++ - 使用 __stdcall 和 Boost 1.47.0 编译错误 log4cxx

如果你能帮忙,我会很高兴的。

我的IDE是VS2010。

我正在使用boost 1.47.0,尤其是 boost::asio。

经过几天的开发,我决定添加 log4cxx。

log4cxx需要将调用约定更改为__stdcall

我出人意料地得到了很多编译错误。它们是约 70 个错误。

我用谷歌搜索了一下,发现了这些:

它有助于。现在只有大约 10 个错误。这里有:

我该如何解决它们?有什么小想法或提示吗?

0 投票
2 回答
10148 浏览

c++ - mingw32 g++ 和 stdcall @suffix

我声明了一些原型化的 C++ 函数,如下所示:

我也有一些导出的第三方 dll function()- 根本没有名称装饰。undefined reference to function@...由于 MinGW 的 stdcall @-suffix,我无法构建我的 exe 或 dll 。如何在没有 @... 的情况下获取目标文件,只是简单的函数名?

0 投票
1 回答
1265 浏览

c++ - 通过对 dll 的 stdcall 操作字符串的问题

我需要创建一个 C++ dll,它将通过 stdcall 从另一个程序调用。

需要什么:调用程序将一个字符串数组传递给 dll,而 dll 应该更改数组中的字符串值。然后调用程序将继续使用来自 dll 的这些字符串值。

我做了一个简单的测试项目,我显然错过了一些东西......

这是我的测试 C++ dll:

这是一个简单的 C# 程序,我用它来测试我的测试 dll:

这是产生的输出:

我有一些问题 :

1)为什么它在数组的第二个位置而不是第一个位置输出元素?

2) 如果我在 dll 文件中取消注释用 ////// 注释的行,程序就会崩溃。为什么?

3)显然我想在dll(/ * * /中的部分)中做更多的事情而不是现在做的事情,但我被前两个问题阻止了......

感谢你的帮助

0 投票
3 回答
1409 浏览

visual-c++ - 用 Mingw 创建静态库链接到 VS2008 项目?

我想做什么?...

首先,使用 MinGW 的 g++ 编译器创建静态库。

所以,简单的示例文件是......

测试.h

测试.cpp

当我使用编译器命令时:

创建文件“libtest.dll”和“libtest.a”。为什么两者都需要?因为,如果你打算在 VS2008 项目(MSVC++)中使用库,这两个文件都是必需的——我在 MinGW 的网站上读到了。

接下来...我创建了 VS2008 Win32 控制台应用程序项目,该项目将从库中调用函数“whatever”。

主文件

在 VS2008 中:“Properties-->Linker-->General-->Additional Library Directories”我添加了以前创建的库的路径,并在“Properties-->Linker-->Input-->Additional Dependencies”中添加了“libtest.一份文件。当我构建项目时,编译和链接正常,生成 exe 文件,但是当我尝试运行 exe 时...发生分段错误(是的,“libtest.dll”与 .exe 文件位于同一文件夹中)!!!我不知道为什么?代码中使用了“__stdcall”,因此将东西推入堆栈应该没有问题......

请问有什么建议吗?

0 投票
1 回答
519 浏览

mfc - 使用 CALLBACK 或 WINAPI 或 PASCAL(在 MFC 中)的函数之前是绝对必要的还是仅出于可读性目的?

MFC VC++中,setTimer函数是使用CALLBACK过程设置的。从我读到的链接

标有 __stdcall 的函数使用如此命名的标准调用约定,因为所有 Win32 API 函数(除了少数接受可变参数的函数)都使用它。

由此,这就是我所理解的,所有 VC++ MFC 函数都__stdcall用作它们的调用转换。

CALLBACK定义如下......

我读过的内容: 在函数前面加上 CALLBACK 用于强调特定函数将在必要时自动调用(例如在这种setTimer情况下或onClick在 javascript 中的情况下),

我的疑问是,在 MFC VC++ 中,所有函数(除了少数接受可变参数的函数)都具有 __stdcall 的默认调用约定。CALLBACK因此,在具有或WINAPIPASCAL具有相同效果的函数之前或不之前?