
Dark
20.03.2018
13:32:57

Denis
20.03.2018
14:02:24
и стабильно глюкавый компилятор

Dark
20.03.2018
14:11:40
И ведь не поспориш

Oleg
20.03.2018
14:27:59

Google

Vitalii
20.03.2018
14:28:12
Пытаюсь вызвать функцию test_hello из dll, пишет:
D:\SRC\D_lang\dll>dmd -m64 call.d
call.d(5): Error: undefined identifier enforce
call.d(8): Error: undefined identifier enforce
Код call.d:
import core.runtime;
import core.sys.windows.windows;
// mydll.dll: int test_hello(int*);
void main() {
auto h = cast(HMODULE)enforce(Runtime.loadLibrary("mydll.dll"));
scope (exit) Runtime.unloadLibrary(h);
auto bar = cast(int function(int*))
enforce(GetProcAddress(h, "test_hello"));
int a = 5;
bar(&a);
}
Что делаю не так? Код взять из презентации Мартина Новака с Dconf

Dark
20.03.2018
14:28:41

Oleg
20.03.2018
14:29:03
просто назвать его стабильным как-то не поворачивается язык

Pavel
20.03.2018
14:30:13

Vitalii
20.03.2018
14:30:54
Заработало! Спасибо!
Я его нашёл в std.exception но только было непонятно что это тот же enforce из примера, т.к. я не разобрался что именно он делает

Dark
20.03.2018
14:32:14

Pavel
20.03.2018
15:56:54
Удобный сахарок )

Denis
20.03.2018
16:12:42
можно рассматривать его как assert который попадёт и в релиз тоже

elias
20.03.2018
16:19:43
Привет! Какие из GUI библиотек для D (неважно - биндинг или нет) за вычетом Qt имеют классы а-ля модель-представление для показа таблиц?

Dark
20.03.2018
16:53:11
Gtkd?

elias
20.03.2018
16:55:06

Google

Pavel
20.03.2018
19:21:00
Ух какие компактные бинарники то ldc2 выдает
DMD 3.7 мб в релизе, ldc2 1.6 мб в релизе

Vitalii
20.03.2018
20:02:15
Интересно. Спасибо!

Denis
20.03.2018
20:09:57
code.dlang.org лёг?

Pavel
20.03.2018
20:13:42
У меня открывается

Denis
20.03.2018
20:13:52
ага заработал
ошибся в написании

Vitalii
21.03.2018
05:25:13
При попытке скомпилировать sample dll написанной на D из каталога компилятора выдает ошибку:
C:\D\dmd2\samples\d\mydll>..\..\..\windows\bin\dmd -m64 -ofmydll.dll -L/IMPLIB mydll.d dll.d mydll.def
LINK : fatal error LNK1146: не указан аргумент для параметра "/IMPLIB"
Error: linker exited with status 1146
C:\D\dmd2\samples\d\mydll>..\..\..\windows\bin\dmd -m64 test.d mydll.lib
LINK : fatal error LNK1104: не удается открыть файл "mydll.lib"
Error: linker exited with status 1104
- что странно, т.к. этот пример вроде как раньше работал. Что я делаю не так?


Denis
21.03.2018
07:45:39
Раньше работал это когда?
Windows: Visual C++ and the Windows SDK are no longer required to build 64-bit executables
The Windows installer now adds platform libraries built from the MinGW definitions and a wrapper library for the VC2010 shared C runtime. When building COFF object files with -m64 or -m32mscoff and no Visual Studio installation is detected or no platform libraries are found these will be used as replacements. If the Microsoft linker is not found, the LLVM linker LLD will be used.
Не оно?


Vitalii
21.03.2018
08:07:18
Раньше работал это когда?
В версии 2.078.3 работала 32-битная компиляция этого примера, без ошибок. С ключём "-m64" не работает и она, сообщение об ошибке то же, что и выше.
Сейчас в версии 2.079 даже 32-битная выдаёт ошибку:
C:\D\dmd2\samples\d\mydll>build.bat
C:\D\dmd2\samples\d\mydll>..\..\..\windows\bin\dmd -ofmydll.dll -L/IMPLIB mydll.d dll.d mydll.def
C:\D\dmd2\samples\d\mydll>..\..\..\windows\bin\dmd test.d mydll.lib
OPTLINK (R) for Win32 Release 8.00.17
Copyright (C) Digital Mars 1989-2013 All rights reserved.
http://www.digitalmars.com/ctg/optlink.html
test.obj(test)
Error 42: Symbol Undefined _D5mydll8dllprintFZv
Error: linker exited with status 1

Denis
21.03.2018
08:09:12
тут в основном народ под линуксом, проще на форуме спросить - там больше народу
может и регрессия случилась

Vitalii
21.03.2018
08:09:52

Denis
21.03.2018
08:10:23
Пожалуйста, обращайтесь ещё :)
http://code.dlang.org/ лежит?
мляхамуха задолбало уже
опять заработало

Stanislav
21.03.2018
08:26:23
Это ci/cd в действии ) по коммитам новая сборка разворачивается сразу ))

Google

Denis
21.03.2018
08:27:41
А без перерыва в обслуживании разве нельзя это запилить?

Stanislav
21.03.2018
08:28:39
Да я шучу, скорей всего оно падает постоянно просто. Самого жутко бесит

Denis
21.03.2018
08:38:20
Вроде там чего-то дублировали недавно

Dark
21.03.2018
09:21:11
Дублирование падений?

Denis
21.03.2018
09:29:25
lol

Vitalii
21.03.2018
09:32:15

Denis
21.03.2018
09:34:34
??

Dark
21.03.2018
09:34:47
А почему черная?

Denis
21.03.2018
09:36:33
сам офигел от выбора
в мазуте копаемся, байтослесари же

Vitalii
21.03.2018
11:44:51
Дальше немного застрял. Хочу скомпилировать в D в dll которая имеет C интерфейс. В оригинальном файле mydll.d функция объявлена так:
export void dllprint() { printf("hello dll world\n"); }
В скомпилированной с помощью dmdm dll-ке функция выглядит так _D5mydll8dllprintFZv
т.е. в стиле C++. Вопрос как к этой функции приделать С интерфейс (типа void(void) в данном случае), чтобы функция в итоге была объявлена как dllprint?

NullSanya
21.03.2018
11:53:59

Vitalii
21.03.2018
11:54:02
Прочитал что нужно extern(C)
.. )) не думал что так просто всё!
Очень-очень круто

Maxim
21.03.2018
12:01:37
https://wiki.dlang.org/Win32_DLLs_in_D#DLLs_with_a_C_Interface есть целая статья про dll

Dark
21.03.2018
12:02:28

Pavel
21.03.2018
12:03:07
А у меня не получается влинковать библиотеки статически в бинарник.. Беда. Очень сложно.
-l не помогает

Vitalii
21.03.2018
12:03:40

Google

Vitalii
21.03.2018
12:04:37
Но, там кроме extern (C) {} никакого шаманства.

Pavel
21.03.2018
12:05:38
Это подозреваю что динамически а не статически
У меня проблема в том что я хочу в докер контейнер абсолютно голый скопировать мой бинарник и чтобы он заработал. Там нет вообще никаких библиотек.
Вот с go это прокатывает, он все по умолчанию линкует туда. А в D требуется шесть(!) библиотек подключить, среди них librt, libc++, libpthread, libdl и еще какие-то там
И чтобы этот бинарник заработал в голом контейнере, надо туда еще эти 6 библиотек скопировать по определенным путям.

Vitalii
21.03.2018
12:08:22

Admin
ERROR: S client not available

Pavel
21.03.2018
12:10:51
да
но чето -lpthread не решает этого
Я через lddсмотрю какие символы бинарник импортирует и он все еще зависит от libpthread.so

Denis
21.03.2018
13:21:08

Vitalii
21.03.2018
13:23:33

Stanislav
21.03.2018
13:24:43
Дефективный с++?))

Vitalii
21.03.2018
13:25:46
Эффективный, конечно. Опечатался ;)

Igor
21.03.2018
13:28:18

Pavel
21.03.2018
13:28:38
Я вписываю это dub он там сам распределяет
в итоге запускает такой флаг -L=-lpthread который передается линковщику
Пробовал вставлять это во всех комбинациях в lflags и в dflags и все одно и то же.

Google

Igor
21.03.2018
13:29:56
ну можно попробовать руками повторить его строку и поиграть с положением флага.

Denis
21.03.2018
13:31:10

Pavel
21.03.2018
13:32:36
Я попробую с голым dmd

Denis
21.03.2018
13:48:01
компилятор отдельно линкер отдельно, так всегда было и так будет

Dark
21.03.2018
16:00:30

Putch
22.03.2018
08:17:40
салямалекум, буду рад если кто-нибудь подскажет.Возможно ли как-нибудь отключить code-coverage для библиотек, подключаемых через dependencies?т.е. чтобы покрытие проверялось только для моего кода из src

Oleg
22.03.2018
08:26:27

Denis
22.03.2018
08:26:45
это не про редактирование вопрос

Oleg
22.03.2018
08:26:57
Хотя да

Putch
22.03.2018
08:26:59
я имею ввиду параметр -cov в dub

Denis
22.03.2018
08:27:04
это опять про нашу систему сборки дефолтную

Oleg
22.03.2018
08:27:22
Даже не про dub...

Denis
22.03.2018
08:27:31
про дуб

Oleg
22.03.2018
08:27:31
Компилятор выдаёт это
Это туда передаётся этот флаг
А он не знает разницы между библиотекой и сорцами

Putch
22.03.2018
08:28:15
просто я юзаю requests из vibe.d и -cov прогоняется через весь vibe, что мне не нужно совсем

Oleg
22.03.2018
08:28:47
Я просто потом удалял файлы скриптом

Denis
22.03.2018
08:28:50
When doing -b unittest-cov dub only builds the current package in unittest-cov mode, all the dependencies are just build in their default mode.
https://forum.dlang.org/post/rrtxjipvjhcptlemgckm@forum.dlang.org
А, туплю