@ProCxx

Страница 2273 из 2477
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
В очередной раз разгребая optional<optional<optional<optional>>> очень захотелось заиметь что-то типа шарпового ?. ?-> если слева не nullptr или аналог, то поли дальше.
А откуда у тебя такие цепные опшены получаются? Нет ли возможности их мержить в optional<> без вложенности?

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
Это автогенеренный код. Типа протобафа. optional поля в такую хрень превращаются. Т.е. это не прям optional<optional>, а несколько уровней инкапсуляции.
Это обращение через несколько уровней вложенности a.b.c.d и на каждом возможность словить NullReferenceException?

madskills
10.08.2018
06:04:32
атрибуты с макросом выше делаются, чтобы объяснить одной стороне, что надо метод экспортировать, а другой - импортировать, вот и все
Вроде как я понял, спасибо! Тогда мне кажется еще пару хидеров забыли кинуть к dll :D Потому что в заголовочном файле к dll я вижу следующее: #ifdef XXX #include "global.h" #include "public/paramsln.h" #define PILOT_NT_API __declspec(dllexport) #else #include "paramsln.h" #define PILOT_NT_API __declspec(dllimport) #endif

то есть если не использовать опцию -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
Это обращение через несколько уровней вложенности a.b.c.d и на каждом возможность словить NullReferenceException?
В этом чате NullReferenceException принято называть segfault. Но в целом верно. Конструкция вида optional<map<int, Type1{optional<Type2{optional<int> field2}> field1} не редкость. И вот хочется писать a?->operator [](10)?->field1?->field2, а не гору проверочного кода, за которым не видно нафига оно, собственно, надо

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

Ilia
10.08.2018
07:16:30
Пока ещё не очень... автор в поисках правильного подхода
Блин, нафига нам ещё и монады? В нефукнциональном-то (грязном) языке ...

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

Ilia
10.08.2018
07:20:30
Всем привет. Я тут правила почитал и думаю, вопрос, касающийся __declspec это вопрос для новичков или тут его задать?
__declspec устарело, Можешь сразу же постигать атрибуты (стандартные). __declspec -- это просто плейхсхолдер в синтаксисе для внедрения специфичных для данной реализации С++ дополнителных атрибутов.

Nik
10.08.2018
07:21:22
Блин, нафига нам ещё и монады? В нефукнциональном-то (грязном) языке ...
Так-то C++ очень популярный функциональный язык на ICFP...

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

Nikita
10.08.2018
07:29:06
FastCGI (*перекрестился*)
А это не модуль ли?

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

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

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

Nikita
10.08.2018
07:32:17
Ну, ищи. Модула -то тут при чём?
Ааа, ты не так понял, Module это не ЯП

а один из способов расширения функционала IIS

Ilia
10.08.2018
07:32:57
Дак оно ж вроде только managed, не?
Любой managed -- это COM, а любой COM можно на С/С++. Тем более что IIS вообще-то появился раньше, чем вообще весь .net

Nikita
10.08.2018
07:33:15
Дак оно ж вроде только managed, не?
Если поделишься ссылочкой где такое будет написано черным по белому, будешь прям вообще молодцом))

Nik
10.08.2018
07:33:56
Ilia
10.08.2018
07:34:12
Если поделишься ссылочкой где такое будет написано черным по белому, будешь прям вообще молодцом))
Не, не буду. Я не спец, и тебе не советую, но ты просто сходу заведомо ложные утверждения выдавал...

Если поделишься ссылочкой где такое будет написано черным по белому, будешь прям вообще молодцом))
Вот хотя бы сюда погляди https://msdn.microsoft.com/en-us/library/hh943083(v=vs.90).aspx Половина расширений -- Native

Nik
10.08.2018
07:38:45
Если поделишься ссылочкой где такое будет написано черным по белому, будешь прям вообще молодцом))
https://docs.microsoft.com/en-us/iis/develop/runtime-extensibility/developing-iis-modules-and-handlers-with-the-net-framework

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
Ну \это мы не понимаем. Модуль там хэндлер...
Ну вот видимо у меня и коллеги на работе из-за мешанины понятий пытаются меня убьедить что нужно написать именно IIS Handler на плюсах, а не IIS Module

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

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

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

Но это дело твоё.

Страница 2273 из 2477