mybar.ixx
export module mybar;
#include "windows.h"
export
double trywinapi() {
MEMORYSTATUSEX memInfo;
memInfo.dwLength = sizeof(MEMORYSTATUSEX);
GlobalMemoryStatusEx(&memInfo);
return memInfo.ullTotalPageFile;
}
main.cpp
import mybar;
#include "windows.h"
void main() {
trywinapi();
}
И ошибка компиляции Visual Studio 2019:
ошибка LNK2019: неразрешенный внешний символ __imp__GlobalMemoryStatusEx@4::<!mybar> указан в функции "double __cdecl trywinapi(void)" (?trywinapi@@YANXZ::<!mybar>)
@RichardCritten да, я могу вызвать trywinapi(), если не использую модуль С++ 20
Фрагмент глобального модуля стоит перед именем модуля:
module;
#include<windows.h>
export module mybar;
export double trywinapi() {…}
#include<windows.h> предшествует работе модуля экспорта mybar.
Я все еще нашел много предупреждений, включив <windows.h>
в модуль C++ и создав для Debug/x64, которые были обработаны следующим образом:
Игнорировать предупреждения внешней библиотеки
mybar.cpp
module;
#pragma warning(push, 0)
#include <windows.h>
#pragma pop(0)
export module mybar;
Это все равно выведет предупреждение:
C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\um\winbase.h(9531,5): предупреждение C5105: расширение макроса, создающее «определенное», имеет неопределенное поведение
Обновите Windows SDK
Предупреждение выше, по-видимому, было проблемой регрессии , которая была решена путем обновления SDK до Windows 10 SDK (10.0.20348.0), версия 2104 и проверки того, что проект Visual Studio использует последний Windows SDK в:
Project
> Properties
> Configuration Properties
> General
> Windows SDK Version
Сделанный.
Моя среда
Edition Windows 11 Home
Update 21H2
OS build 22000.51
Experience Windows Feature Experience Pack 421.16300.0.3
Microsoft Visual Studio Community 2022 Preview
Version 17.0.0 Preview 1.1
VisualStudio.17.Preview/17.0.0-pre.1.1+31423.177
Version 4.8.04161
Вы связываетесь с
Kernel32.lib
, как описано здесь (см. раздел «Требования») learn.microsoft.com/en-us/windows/win32/api/sysinfoapi/…