Предупреждение C4251 dll со статическими библиотеками [duplicate]

Отработано около 3 часов.

Я просто хотел использовать файлы import и export в js.

Все говорят, что это невозможно. Но с мая 2018 года можно использовать выше в plain node.js без каких-либо модулей, таких как babel и т. Д.

Вот простой способ сделать это.

Создать ниже файлов, запустите и посмотрите вывод для себя.

Также не забудьте увидеть Explanation ниже.

myfile.mjs

function myFunc() {
    console.log("Hello from myFunc")
}

export default myFunc;

index .mjs

import myFunc from "./myfile"

myFunc();

run

node  --experimental-modules  index.mjs

output

(node:12020) ExperimentalWarning: The ESM module loader is experimental.

Hello from myFunc

Объяснение:

  1. Поскольку это экспериментальный модули, файлы .js называются .mjs-файлами
  2. Во время работы вы добавите «-experimental-modules» в «node index.js»
  3. . При работе с экспериментальными модулями в вы увидите: «(node: 12020) ExperimentalWarning: загрузчик модуля ESM является экспериментальным.«
  4. У меня есть текущая версия узла js, поэтому, если запустить «node -version», это дает мне «v10.3.0», хотя версия LTE / стабильная / рекомендуемая версия - 8.11.2 LTS.
  5. В будущем вы можете использовать .js вместо .mjs, поскольку функции становятся стабильными, а не Экспериментальный.
  6. Чтобы использовать экспериментальные особенности es, см. https://nodejs.org/api/esm.html

Надеюсь, что это помогло.

13
задан Rob 25 January 2010 в 15:04
поделиться

4 ответа

Этот поток дает то, что я считаю лучшим ответом, Doug Harrison (VC ++ MVP):

[Это предупреждение] испускается, когда вы используете не- dllexported класс X в dllexported классе Y. Что в этом плохого? Предположим, что Y имеет встроенную функцию y_f, которая вызывает функцию x_f, принадлежащую X, которая также не является встроенной. Если y_f встроен внутри некоторого клиента, который не статически связывает X, ссылка не будет выполнена, потому что x_f не будет найден.

15
ответ дан UmNyobe 26 August 2018 в 05:51
поделиться
  • 1
    Ссылка удалена. – laishiekai 28 May 2014 в 00:32
  • 2
    Связанная цитата: qtforum.org/article/36372/warning-c4251.html – Will Bickford 17 June 2014 в 20:28
  • 3
    @WillBickford: Спасибо, я думал, что первоначальное обсуждение было давно потеряно .. – Ofek Shilon 19 June 2014 в 16:58
  • 4
    @Knitschi: (1) Технически я думаю, что предупреждения испускаются интерфейсом компилятора, который не имеет понятия о встраивании решений, (2) Я лично считаю, что это предупреждение должно быть полностью опущено. Даже когда неисключенный класс используется во встроенной функции - повреждение является ошибкой связывания, а не временем выполнения, и должно быть немедленно исправлено. – Ofek Shilon 13 September 2016 в 10:22
  • 5

Ниже приведен поток с хорошим обсуждением этого вопроса.

Короче говоря, компилятор предупреждает вас, что, по сути, ваш экспортированный класс не отделяет интерфейс от реализация. Если члены, о которых идет речь, не доступны для клиентов, сделайте их закрытыми и #pragma покиньте предупреждение для этого члена / класса. Если участники доступны и используются клиентами, вам необходимо будет предоставить косвенный доступ к членам через аксессуар и мутаторы.

5
ответ дан Community 26 August 2018 в 05:51
поделиться
  • 1
    Итак, если предупредительные объекты уже закрыты для класса, мы можем смело игнорировать это предупреждение? – meawoppl 25 February 2014 в 02:16

Я обычно получаю это предупреждение, когда делаю глупую ошибку при построении DLL с библиотекой времени исполнения Single / Multithreaded вместо Single / MultithreadedDLL. Вы можете проверить это в настройках вашего проекта.

0
ответ дан William Knight 26 August 2018 в 05:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: