
Egor
09.08.2018
19:07:47
strongly against, 7 шт.

madskills
09.08.2018
20:47:29
Всем привет. Я тут правила почитал и думаю, вопрос, касающийся __declspec это вопрос для новичков или тут его задать?

Constantine
09.08.2018
20:50:02
Лучше просто задайте, не угадаете - вас перенаправят

Alex Фэils?︙
09.08.2018
20:50:32
собственно, __declspec - это синтаксис атрибутов для MSVC, Грубо говоря

Google

Constantine
09.08.2018
20:51:05
вроде связанных с линковкой
а, нет

Alex Фэils?︙
09.08.2018
20:51:42
да, он позволяет делать дофига фигни:
1. делать DLL/статические либы;
2. убирать прологи/эпилоги;
3. что-то еще, я не помню

Constantine
09.08.2018
20:52:15
там еще nothrow noreturn и прочие прелести


madskills
09.08.2018
21:03:25
Так получилось, что я не плюсовик сам по себе, но возникла необходимость использовать одну библиотеку, так что была поставлена задача обернуть ее. С линуксовыми библиотеками я уже делал такие манипуляции с помощью SWIG. Немного почитал вот тут http://www.swig.org/Doc1.3/Windows.html и заинклюдил все необходимое. Пришла пора собирать, вот тут я и поплыл :) Сама обертка сгенериорвалась корректно (наверное), ошибок компиляции нет, но при попытке прилинковаться я получал ошибку линкера (в вин он почему-то называется компоновщик): undefined reference to "__imp__CloseKeyboard". Прошелся dumpbin, там функции вида _CloseKeyboard. И только после этого я посмотрел на заголовочный файл внимательно и увидел там следующее
#ifdef KEYWORD
#include "global.h"
#include "public/paramsln.h"
#define PILOT_NT_API __declspec(dllexport)
#else
#include "paramsln.h"
#define PILOT_NT_API __declspec(dllimport)
#endif
Окей, почитал вот тут: https://docs.microsoft.com/ru-ru/cpp/cpp/declspec и понял, что для экспорта вызовов функций мне надо использовать при сборке -DKEYWOD, а в сгенерированном файле .с мне надо проследить, чтобы выполнялся #define PILOT_NT_API __declspec(dllimport)
но я после всего этого немного не понимаю следующего - а как мне тогда поступать, если тот сгенерированный файл по сути своей обертка над уже существующей библиотекой, ведь в обертке по идее мне тоже нужно использовать данные атрибуты
надеюсь, что не слишком непонятно задал вопрос и вообще я мог ошибаться в ходе поисков информации


Constantine
09.08.2018
22:39:31
его пишут в сигнатуру метода в духе PILOT_NT_API void foo()

Friedrich
10.08.2018
05:00:05

Nik
10.08.2018
05:02:33
Это автогенеренный код. Типа протобафа. optional поля в такую хрень превращаются. Т.е. это не прям optional<optional>, а несколько уровней инкапсуляции.

Google

Friedrich
10.08.2018
05:30:39
То есть там может быть, например, vector<map<optional>>?
Тогда какие проблемы, это же нормально :)

Dmitry
10.08.2018
05:39:12

madskills
10.08.2018
06:04:32
то есть если не использовать опцию -DXXX у меня означает, что метод наоборот импортируется, а global.h у меня нет :)

Friedrich
10.08.2018
06:05:51
Ну, если ты собираешь клиента, то тебе нужен только paramsln.h

madskills
10.08.2018
06:06:49
по сути клиента, да, которая по сути является еще одной библиотекой
собственно и будет вызывать методы

Friedrich
10.08.2018
06:07:53
Ну вот. Если пишешь клиента — значит, всё ок, и тебе всё доложили.

madskills
10.08.2018
06:11:09
хмм, значит я все же в генераторе где-то навалял, понял)

Nik
10.08.2018
06:16:16

Dmitry
10.08.2018
06:18:11

Simon
10.08.2018
06:18:20
Юзай макросы

Nik
10.08.2018
06:18:35
возвращать можно тот же optional, только один.
макросы выгледят не особо красивше

Dmitry
10.08.2018
06:19:13

Nik
10.08.2018
06:19:17
да

Dmitry
10.08.2018
06:27:25
Нет операторов обращения к члену класса. Даже если возвращать какой то stub с инфой о типе, не получится сгенерировать красиво заглушку.
Которая могла бы добраться до конца цепочки и выцепить result type.

Google

Dmitry
10.08.2018
06:36:38
А вообще хотели NullObject pattern, нате. Со всеми сопутствующими... C#, Java, Lua etc. как то живут :)

Roman
10.08.2018
06:39:32
Народ, кто сталкивался с утечками GDI Объектов, проект на С++ с Winapi, может кто подсказать чем трассировку можно сделать, пара рекомендаций тоже будет кстати =)

Dmitry
10.08.2018
06:58:46
О, кстати о null. Помнится @webreh рассматривал возможность альтернативной null policy для optional, null not constructed state. Вообще мне кажется многие типы могли бы и в constructed состоянии поддерживать null state. Можно было бы зыдешево через null_traits делать null object без optional. Типа enable_if<null_traits<T>::defined>. std::is_null(const T&), x == std::null...

Nik
10.08.2018
07:01:30

Roman
10.08.2018
07:02:39

Ilia
10.08.2018
07:16:30

yuri
10.08.2018
07:18:45
Во-во. Монады вышли из моды еще в 2006 году, но с завидной регулярностью появляются пионеры-энтузиасты.

Ilia
10.08.2018
07:20:30

Nik
10.08.2018
07:21:22

Ilia
10.08.2018
07:22:20

Nikita
10.08.2018
07:25:00
Ребят есть тут те, кто с IIS работает? Правильно ли я понимаю, что написать Handler для него на плюсах не получится? (получится только Module)

Nik
10.08.2018
07:26:12

Nikita
10.08.2018
07:29:06

Stanislav
10.08.2018
07:29:29

Ilia
10.08.2018
07:29:44

Stanislav
10.08.2018
07:29:56
можно конечно с .def файлами по это самое

Ilia
10.08.2018
07:30:23

Nikita
10.08.2018
07:31:13
Чего? ЧЗБ?
Ну я лично не могу найти вообще никакой информации о том как писать IIS Handlers на плюсах, находил только кучу информации о том как делать это на шарпах

Google

Nikita
10.08.2018
07:31:36
С другой стороны, информации по C++ IIS Modules имеется достаточно

Ilia
10.08.2018
07:31:48

Nik
10.08.2018
07:31:54

Nikita
10.08.2018
07:32:17
а один из способов расширения функционала IIS

Ilia
10.08.2018
07:32:57

Nikita
10.08.2018
07:33:15

Nik
10.08.2018
07:33:56

Ilia
10.08.2018
07:34:12

Nik
10.08.2018
07:38:45

Nikita
10.08.2018
07:38:55
это модули
С другой стороны написано
The handler is a .NET class that implements the ASP.NET System.Web.IHttpHandle...

Ilia
10.08.2018
07:40:29
это модули
https://docs.microsoft.com/en-us/iis/develop/runtime-extensibility/develop-a-native-cc-module-for-iis
Вот прямо рядом там...

Nikita
10.08.2018
07:41:01

Ilia
10.08.2018
07:41:51
Ну \это мы не понимаем. Модуль там хэндлер...

Nikita
10.08.2018
07:42:47

Ilia
10.08.2018
07:42:50
Я ж не спец в IIS, чего ты от меня хочешь?

Google

Ilia
10.08.2018
07:43:06

Nikita
10.08.2018
07:43:35
Чем они отличаются?
Если я правильно понял, то модули отвечают за обработку всех поступающих на iis запросов, а хендлеры - только за обработку запросов какого-то конкретного типа ресурса

Ilia
10.08.2018
07:45:22
Ну мне кажется вообще что IIS сейчас использовать -- не лучшая затея...
Но это дело твоё.

Nik
10.08.2018
07:46:01