导出函数的默认调用约定是什么(VS2008)?

时间:2011-11-07 11:57:44

标签: c# c++ visual-studio-2008 dllexport calling-convention

鉴于以下C ++代码未在函数声明中提及调用约定,导出函数Exported的调用约定是什么?我的猜测是cdecl的默认值。

extern "C"
{
  __declspec (dllexport) bool Exported(int parm);
}

我正在使用LoadLibraryGetProcAddressMarshal.GetDelegateForFunctionPointer从托管代码调用此函数。我可以使用UnmanagedFunctionPointer属性的不同值来装饰我的委托定义,并且所有似乎都能正常工作。

2 个答案:

答案 0 :(得分:5)

默认调用约定是cdecl。请注意,__ declspec(dllexport)对调用约定没有影响。

可以在代码中或通过编译器选项指定调用约定。我不建议使用编译器选项,它有点太模糊了。在代码中明确表示,然后读取的任何人都知道使用了什么约定。

请注意,对于64位Windows代码,所有调用约定都是等效的,可以解释您所看到的内容。

答案 1 :(得分:2)

默认调用会话还取决于某些编译器开关:

在c / c ++下 - >高级你可以设置它:

/ Gd = cdecl,/ Gz = stdcall,/ Gr = fastcall