问题标签 [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.
c - C - 从非托管 DLL 正确导入 stdcall 函数
我正在尝试通过创建一个指定我需要使用的函数的 .def 文件来将非托管 DLL 中的函数导入 C 项目。我正在练习MessageBoxA
从user32.dll
. 它是一个 stdcall 函数,与其他 WinAPI 函数一样。这是我创建 .def 文件的方法:
然后我像这样从中创建一个 .lib:lib /def:"C:\Path\to\def\user32.def" /
out:"C:\path\to\project\user32-mb.lib"
它成功地创建了user32-mb.lib
和user32-mb.exp
. 然后,在我的 C 项目中,我执行以下操作:
但是,在链接时,它会给出以下错误:
error LNK2019: unresolved external symbol _MessageBoxA@16 referenced in function _main
但是,当我将 .def 中的声明更改为:
并将我的 C 代码中的函数原型更改cdecl
为stdcall
:
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
正确导入和调用函数?
c++ - 为什么使用 __stdcall 作为函数指针
我在看一些像这里提到的代码:winapi函数的函数指针(stdcall/cdecl),函数指针和调用约定等。
将函数指针的调用类型声明为 有什么需要和好处__stdcall
?
为什么要声明函数指针的调用类型?
c++ - 将 VB6 布尔变量传递给 C++ DLL 中的 stdcall 函数
我正在寻找将 VB6 布尔变量传递给函数(用 C++ 编写,stdcall)的最安全的方法。
C++ 函数将使用此 VB6 变量设置结构的“bool”变量。
我试过在 C++ 中这样声明它:
stSetParameter 声明为
DLL_sSetting 声明为
但是,我无法让它工作。
我在 VB6 中使用
但它没有按预期工作,我猜 VB6 布尔值在某处丢失或被错误地转换。
我目前正在使用 VB6 Boolean、C++ BOOL 和 C++ bool。我知道这不太好,但我看不到任何其他方式。
有人发现我的代码有问题吗?
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.
assembly - 在 x86 上的 winapi __stdcall 中,第二个参数在哪个寄存器中?
在 x86 上的 winapi __stdcall 中,第二个参数存储在哪个寄存器中?(ECX?)-另外,我知道在哪里可以找到有关此的一些文档吗?
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 试图教我的内容,我现在理解了链接器命令的含义,并且我看到这次链接器设置正确。但为什么它不能正确编译?
c# - DllExport 未创建入口点
我正在尝试使用 Robert Giesecke 的“ UnmanagedExports ”nuget 包创建一个 C# 非托管 DLL,但它似乎没有创建任何入口点。
完整代码在这里:
我究竟做错了什么?
澄清:
这是Arma 3 的扩展 DLL,它需要一个名为 " " 的入口点并_RVExtension@12
带有签名:
编辑:我在项目设置中将目标平台指定为 x86,但没有运气。
gnu - 在回调函数上添加 stdcall 会导致参数不匹配 [GNU]
我正在尝试将 stdcall 调用约定添加到我的 GNU 编译的 DLL 中。
这是我的代码:
它被这个函数调用:
在哪里:
问题是它给了我这个注释:
注意:预期为“CTMCashAcceptCallback”,但参数类型为“void (*)(const struct CTMEventInfo, const struct CTMAcceptEvent)”
当我删除 __stdcall 或将其替换为 __cdecl 时,它不会提供该信息。通过 GNU 编译时是否不能使用 stdcall 或者我做的不对?
visual-studio-2012 - 混合 cdecl 和 stdcall 调用约定
我已经在 Windows VS2012 (.lib) 上构建了一个静态库,使用 stdcall 约定编译。当我说“已经构建”时,我的意思是不幸的是我无法使用我选择的调用约定来重建它。
是否可以从使用 cdecl 约定编译的代码中调用该库中的函数?或者至少做某种包装?
我不确定这是否可能(在浏览了 SO 之后,我实际上几乎确信这是完全不可能的)但是这里有些人含糊地提到可能有一个 kludge。任何想法 ?
assembly - 结构如何在程序集中作为参数传递
结构体如何在汇编中作为参数传递?
由于结构的大小比正常大,各个字段是否按顺序传递?
如果是这样,它们是否像正常参数一样以相反的顺序排列?
cdecl 和 stdcall 之间有什么区别吗?