c - dll中的导出函数

标签 c dll

我制作了一个 dll 并使用导出了其中的函数 _declspec(dllexport) 在函数定义的最左边。 喜欢:

_declspec(dllexport) void func1(char*p);

这是将函数导出为某处的正确方法吗?

我读过关于 _stdcall 的内容,例如:

_declspec(dllexport) void _stdcall func1(char*p);

_declspec(dllexport) void _cdecl func1(char*p); 

请解释这三者的区别,我很困惑。

最佳答案

您的第一个签名是正确的。第二个和第三个也是。但是,_stdcall_cdecl 是调用约定,它们指定调用堆栈中参数的顺序以及调用时的一些其他内容。例如,'_thiscall' 是另一个调用约定,这意味着 this 指针将在函数调用期间通过寄存器(ECX)传递。

因此,简而言之,这三者都可以工作,但是这三者都指定了一些关于如何进行调用的内部细节。

您可能需要阅读 this article了解有关调用约定的更多信息:

关于c - dll中的导出函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15265187/

相关文章:

c - 从C中的1D数组填充2D数组

c - 两个相等的整数值之间的比较在C中返回false

c++ - 无论如何,不​​是为 DLL 显式实例化模板代码,而是以某种方式隐藏实现代码本身吗?

c# - 如何在c#项目中使用c++ dll?

c - C 语言中 libmcrypt 的问题

C: 字符用户在命令提示符下输入

c - 文件描述符和进程关系

java - 在java中的64位机器上运行32位dll

c# - 为什么是 "C:\Windows\Microsoft.NET\assembly\GAC_32..."而不是 "C:\Windows\assembly\GAC_32"

c++ - 延迟加载 DLL 和关联的 .lib 文件