При попытке вызвать функцию со следующей подписью (скомпилировано MSVC ++):
BOOL CreateJunctionPoint(LPCTSTR szMountDir, LPCTSTR szDestDir);
и описано в F # как
[<DllImport("FSLinks.dll", CallingConvention = CallingConvention.Cdecl)>]
extern int CreateJunctionPoint(string source, string target)
Я получаю дисбаланс стека.
Та же самая функция, вызываемая из C #, работает отлично.
После изменения соглашения о вызовах на stdcall в C ++:
BOOL __stdcall CreateJunctionPoint(LPCTSTR szMountDir, LPCTSTR szDestDir);
F # программа начинает работать в обычном режиме (хотя все еще с установленным CallingConvention = CallingConvention.Cdecl)Мне кажется очевидной ошибкой компилятора.
Оба компилятора взяты из Visual Studio 2010 (сборка Microsoft (R) F # 2.0, сборка 4.0.30319.1)