Как правильно импортировать windows.h как модуль

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>)

Вы связываетесь с Kernel32.lib, как описано здесь (см. раздел «Требования») learn.microsoft.com/en-us/windows/win32/api/sysinfoapi/…

Richard Critten 20.12.2020 14:45

@RichardCritten да, я могу вызвать trywinapi(), если не использую модуль С++ 20

bitnick 20.12.2020 14:53
Почему в Python есть оператор &quot;pass&quot;?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
2
2
2 249
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Фрагмент глобального модуля стоит перед именем модуля:

module;
#include<windows.h>
export module mybar;
export double trywinapi() {…}

#include<windows.h> предшествует работе модуля экспорта mybar.

bitnick 21.12.2020 01:31

Я все еще нашел много предупреждений, включив <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

Другие вопросы по теме