F#忽略在DllImport属性中设置的CallingConvention?

时间:2011-10-23 20:40:14

标签: compiler-construction f#

尝试使用以下签名调用函数时(由MSVC ++编译):

BOOL CreateJunctionPoint(LPCTSTR szMountDir, LPCTSTR szDestDir);

并在F#中描述为

[<DllImport("FSLinks.dll", CallingConvention = CallingConvention.Cdecl)>]
extern int CreateJunctionPoint(string source, string target)

我得到了堆栈不平衡。

从C#调用的相同函数完美无缺。

在C ++中将调用约定更改为stdcall之后:

 BOOL  __stdcall CreateJunctionPoint(LPCTSTR szMountDir, LPCTSTR szDestDir);

F#程序开始正常工作(虽然仍然有CallingConvention = CallingConvention.Cdecl设置) 对我来说似乎是明显的编译器错误。

两个编译器都来自Visual Studio 2010(Microsoft(R)F#2.0 Compiler build 4.0.30319.1)

1 个答案:

答案 0 :(得分:1)