尝试使用以下签名调用函数时(由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)
答案 0 :(得分:1)