F # игнорирует CallingConvention, установленный в атрибуте DllImport? - PullRequest
1 голос
/ 24 октября 2011

При попытке вызвать функцию со следующей подписью (скомпилировано 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)

1 Ответ

1 голос
/ 24 октября 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...