问题标签 [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++ - 不适用于 Windows 7,但它适用于 Windows 8 dll
我有两个DLL文件,A和B。
A 需要 B 用于 setWindowsHookEx()。
我用:
当我尝试在 Windows 7 上运行我的程序时,GetProcAddress(hDll, "GetMsgProc")
返回错误。
GetLastError()
返回 122,但我认为这不是一个好的错误代码。
当我在 Windows 8 上运行我的程序时,一切正常。
当我更改函数调用时GetProcAddress(hDll, "foo")
typedef void(*foo)();
只是创建消息框
一切都适用于 Windows 7 和 Windows 8。
我认为我的问题是__stdcal
l,但我没有找到解决方案。
DLL 文件 A
DLL 文件 B
我在 Windows 8 64 位和 Windows 7 32 位上运行我的程序。
我运行Dependency Walker并找到了 name GetProcAddress(hDll, "_GetMsgProc@12");
,但我的程序无法运行。
c++ - cdecl 和 std 调用 - 如何使我的代码常规化
我有在此代码中实现标准调用的任务 - 是 cdecl 或 std 调用
'mov eax, [ebp+8] // 获取第一个被推送的参数'
我理解推动指针位置的想法,但我不确定我会告诉指针在哪里看。
是那个 mov eax, [ebp+4/8/12] 或者你有什么
任何帮助告诉我我将如何做到这一点将不胜感激,同样,如果你们中的一个人确实解决了这个问题,可以添加解释
谢谢
java - 从 JNA/C 与 Pascal 调用 DLL 的结果不一致
我有一个提供头文件的 c++ dll 库,但没有实现。我为这个库函数实现了 JNA 调用。而且我只有一个功能(其他,甚至类似的工作正常)的问题。这是来自 .h 文件的声明:
Java代码:
该函数应返回不同的 int 错误代码,但它始终返回代码 0xFFFF。
我可以用 Pascal 中的相同代码检查它:
Pascal 代码返回 2,Java 代码返回 65535。此外,Pascal std 调用工作正常,更改参数我们得到不同的错误代码(0=OK 和其他),但具有相同参数的 Java 不起作用,它总是返回 0xFFFF。如何调试它以了解问题?
PS 此外,在同一个库中,我有这个功能,它可以在 JNA 上正常工作,没有任何问题:
操作系统是 Win8 x64,JavaOracle7x86,库是 x32。“无符号长”不应该是问题,因为它在 Windows 上应该是 4 个字节。
如果在这两个示例中相同的 STD 调用返回不同的结果,我做错了什么?我该如何调试它?
c++ - 在 Pascal 和 c++ 中 win32 dll 函数的 std 调用不同
我有这个函数的 C dll:
CALLINGCONV 是 _stdcall。我用 C++ 调用它:
返回值(代码)是错误代码,带这个参数应该是2,这里返回65535——未知错误。
当我在 Pascal 中运行相同的代码时:
正如预期的那样,它返回 2。为什么相同的调用表现不同?有什么区别?
操作系统是 Win8x64,编译 c++ 代码我使用 VS2013,lib.dll 是 32 位的。
与此相关的问题: 从 JNA/C 与 Pascal 调用 DLL 的结果不一致, 但该问题不包括 JNA 和 JAVA。
不幸的是,我没有 dll 库的来源,只有一些头文件。
json - TJSONObject ToString 方法访问冲突
我调用了一个返回 TJSONObject 的 dll 函数。问题是当我尝试将此值添加到TStringList
引发访问冲突异常时。这是我的代码:
这是显示的错误:Exception class $C0000005 with message 'c0000005 ACCESS_VIOLATION'
winapi - 当名称可能被修饰时使用 GetProcAddress
GetProcAddress()
在 32 位 DLL 上使用的正确方法是什么?在win32上,共有三种调用约定,cdecl、stdcall和fastcall。如果 DLL 中的函数是foo
他们将通过以下方式装饰名称_foo
,_foo@N
并且@foo@N
.
但是如果 dll 的作者使用了 .def 文件,那么导出的名称将被更改为只是“foo”而没有任何修饰。
这给我带来了麻烦,因为如果我想foo
从使用 stdcall 的 dll 加载,我应该使用修饰名称:
或未装饰的:
? 我应该猜吗?我查看了许多 32 位 DLL 文件(stdcall 和 cdecl),它们似乎都导出了未修饰的名称。但是你能假设情况总是如此吗?
assembly - ASM 函数调用和 Ret - ret 0xC 有什么作用?
ret 是做什么的?为什么这里需要 ret 0xC?如果它只是 ret 而不是 ret 0xC 或者 0x4 怎么样?
c# - stdcall 调用约定和在 C# 中使用 pinvoke
我创建了一个 DLL 文件,其中包含以下两个空函数。
在 C# 中,我可以使用DLLImport
如下属性调用函数。
所以我再次尝试直接使用LoadLibrary()
kernel32.dll 而不是DllImport
属性。
但是,当我调用 MyFunc1() where MyFunc2() works时会发生运行时错误。
所以我__stdcall
用__cdecl
C++ 替换,重新编译 DLL,然后在 C# 中再次调用 MyFunc1()。
而且..它奏效了。
为什么 __stdcall 调用约定不能与 C# 中的 pinvoke 一起使用?
c - 与 __STDCALL 混淆
我正在尝试与来自 exe 的 dll 进行通信,当我在 dll 中添加 WINAPI 时,我在调用 GetProcAddress() 期间得到一个 NULL 值。
示例代码是:
EXE文件:
动态链接库:
头文件:
源文件:
当相同的代码在没有 WINAPI 调用的情况下运行时,我在 GetProcAddress() 中得到一个非 NULL 值。
谁能帮我这个。
谢谢。
c++ - 动态调用 kernel32、user32 等中的任意函数
IDE:Code::Blocks 编译器:g++ 4.5.4(来自 Mingw32_i686) 类型应用程序:控制台类型
好的
我会给出代码,它没有按预期工作。这段代码应该表明我的愿望。
我想使用四个包装函数来引发任何 winapi 函数。
F
- 函数不返回任何内容并且没有输入参数
F_
- 函数不返回任何内容,但它具有输入参数
_F
- 函数返回一个值,但没有输入参数
_F_
- 函数返回一个值,并有输入参数
我想定义函数返回值的类型和要传递给运行时函数的参数类型,而不是在编译时。
当然,我也不想在编译时确定要传递给函数的参数数量。
有任何想法吗?这甚至可能吗?
升级版:
我下载了 libffi 3.0.6 win32(在我的测试控制台应用程序中使用了 libffi.dll.a 和头文件),但给出了警告:“找不到 libffi-5.dll”。
我下载了http://rpm.pbone.net/index.php3/stat/4/idpl/24142309/dir/fedora_16/com/mingw32-libffi-3.0.9-2.fc15.noarch.rpm.html,解压,在 C:\Mingw32\bin 中找到了 libffi-5.dll 并复制了这个 .dll。
测试代码:
是的!我有一个工作代码!
我会继续研究这个问题。