Компиляция кода, использующего соглашения о вызовах, через node-gyp в Windows MS / VS - PullRequest
0 голосов
/ 02 февраля 2019

Заявление заранее, я не программист Windows.

Я пытаюсь разработать расширение Node, которое отлично работает на macOS, но в Windows мне нужно включить заголовок с таким определением:

typedef DWORD WINAPI (*CM_Open_DevNode_Key)(DWORD, DWORD, DWORD, DWORD, ::PHKEY, DWORD);

Я понимаю, что WINAPI - это #define для __stdcall, что является соглашением о вызовах на win32.

Строка не компилируется с MSVS 2017: winportfactory.h(54): error C2059: syntax error: '(' из-за __stdcall.

Я думаю У меня установлен MSVS для win32.Я позвонил npm config set arch ia32, и мой binding.gyp выглядит так:

"defines": [
  "__WIN32__"  # Needed to include the right subheader
],
"msvs_configuration_platform": "win32",
"msvs_settings": {
  "VCCLCompilerTool": {
    "AdditionalOptions": [
      "/EHsc",
      "/std:c++17"
    ]
  }
}

Вот полный вызов компилятора:

  C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Tools\MSVC\14.16.27023\bin\HostX64\x86\CL.exe /c /I"C:\Users\danni\.node-gyp\10.15.1\include\node" /I"C:\Use
  rs\danni\.node-gyp\10.15.1\src" /I"C:\Users\danni\.node-gyp\10.15.1\deps\openssl\config" /I"C:\Users\danni\.node-gyp\10.15.1\deps\openssl\openssl\include" /I"C:\Users\danni\.
  node-gyp\10.15.1\deps\uv\include" /I"C:\Users\danni\.node-gyp\10.15.1\deps\zlib" /I"C:\Users\danni\.node-gyp\10.15.1\deps\v8\include" /I..\src /I..\extern\bossa\src /I..\node
  _modules\nan /I..\src\compat /Z7 /nologo /W3 /WX- /diagnostics:classic /MP /Ox /Ob2 /Oi /Ot /Oy /GL /D NODE_GYP_MODULE_NAME=bossa /D USING_UV_SHARED=1 /D USING_V8_SHARED=1 /D
   V8_DEPRECATION_WARNINGS=1 /D WIN32 /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _HAS_EXCEPTIONS=0 /D VERSION=bossajs /D __WIN32__ /D BUILDING_NODE_EXTENSION /
  D _WINDLL /GF /Gm- /MT /GS /Gy /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /GR- /Fo"Release\obj\bossa\\" /Fd"Release\obj\bossa\vc141.pdb" /Gd /TP /wd4351 /wd4355 /wd4800
  /wd4251 /wd4275 /wd4244 /wd4267 /analyze- /FC /errorReport:queue /EHsc /std:c++17 ..\src\index.cc ..\src\bossajs.cc ..\src\observer.cc ..\src\connectworker.cc MORE_FILES "C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\src\win_delay_load_hook.cc"
  index.cc

Куда я иду не так?

1 Ответ

0 голосов
/ 02 февраля 2019

Я обнаружил, что причина сбоя не в том, что они отключены или какая-то проблема конфигурации, а в том, что MSVC не согласен с порядком токенов.

Это должно быть:

typedef DWORD (WINAPI *CM_Open_DevNode_Key)(DWORD, DWORD, DWORD, DWORD, ::PHKEY, DWORD);

Этот ответ содержит более подробную информацию.

...