declspec和stdcall与仅declspec
|
我是C ++ dll导入主题的新手,可能是我的问题很简单,但我在Google上找不到它。
我有一个非常简单的C ++ win32 dll:
#include <iostream>
using namespace std;
extern \"C\"
{
__declspec(dllexport) void __stdcall DisplayHellowFromDLL()
{
cout<<\"Hi\"<<endl;
}
}
当我从C#调用此方法时,我没有任何问题,这是C#代码
namespace UnmanagedTester
{
class Program
{
[DllImport(@\"C:\\CGlobalDll\")]
public static extern void DisplayHellowFromDLL();
static void Main(string[] args)
{
Console.WriteLine(\"This is C# program\");
DisplayHellowFromDLL();
}
}
}
如我预期的那样,输出为:\“ This is C#program \” \“ Hi \”。
现在,如果我将C函数的声明更改为:
__declspec(dllexport) void DisplayHellowFromDLL()
没有__stdcall,我也没有任何问题,问题是:
我何时真正需要__declspec(dllexport)TYPE __stdcall?何时只能使用__declspec(dllexport)TYPE?
非常感谢。
没有找到相关结果
已邀请:
4 个回复
济畦刨
殿虫
的是
,这意味着:调用方清理堆栈。 “ 7”是\“ natural \” C调用约定;它支持vararg函数的定义(如printf)。
是DLL函数的默认调用约定,因此,如果仅打算通过它们的DLL API调用这些函数,则无需指定它。 这应该可以解释您正在观察的内容。
辟官陡板休
嘘伪