1. PerlAmutor 47 10.08.17 16:20 Сейчас в теме

Создание внешней компоненты с помощью MinGW

Добрый день. Бьюсь уже неделю, не могу заставить работать тестовую внешнюю компоненту с ИТС.- "AddInNative"
По идеологическим соображениям отказался от использования MSVC и решил собрать компоненту с помощью MinGW (gcc).

Первое с чем я столкнулся это отсутствие возможности сгенерить Makefile из CMakeLists.txt. Т.к. разработчики предусмотрели сборку только либо с помощью msvc, либо с помощью gcc (linux only). Когда я вручную доработал cmakelists.txt файл , то в последствии пришлось еще править и исходники компоненты, т.к. началась "свистопляска" с дефайнами в хедерах. Это я тоже победил. Компонента собралась но потащила с собой эти файлы:
libgcc_s_dw2-1.dll
libstdc++-6.dll
libwinpthread-1.dll

В итоге пришло осознание того, что 1С умеет работать только со standalone файлами плагинов и не видит эти .dll даже если они лежат в той же папке откуда грузится компонента. Т.е. нужно было все это компилировать статически в один файл. К сожалению "заставить" стандартную сборку MinGW залинковать статически библиотеки не удалось. Скачал в итоге сборку TDM-GCC, снова пришлось под неё править исходники компоненты, т.к. эта сборка не знает ничего о некоторых чисто msvcr функциях. Все-таки dll собралась статически. Но при вызове ПодключитьВнешнююКомпоненту() грохает клиент с исключением.

В связи с чем прошу поделиться вас своим опытом по сборке и линковке внешних компонентов, которые имеют зависимости от других .dll и собираются не только с помощью msvc, у которого синтаксис С++ может радикально отличаться от gcc.
Ответы
Избранное Подписка Сортировка: Древо
2. PerlAmutor 47 11.08.17 12:27 Сейчас в теме
Запустил под gdb. Вот что пишет:

warning: shell\ext\thumbnailcache\lib\thumbcacheapi.cpp(226)\thumbcache.dll!6AE4069D: (caller: 6AE406F1) ReturnHr[PreRelease](1) tid(500) 8004B200
[Thread 7696.0x1eec exited with code 0]

Thread 1 received signal SIGSEGV, Segmentation fault.
[Switching to Thread 7696.0x1740]
0x62601337 in CAddInNative::~CAddInNative (this=0x6261e5e0 <vtable for CAddInNative+8>, __in_chrg=<optimized out>)
    at I:\mingwprojects\VNCOMP83\example\NativeAPI\AddInNative.cpp:90
90      CAddInNative::~CAddInNative()
Показать

Что за dll'ка thumbcache.dll такая?
3. PerlAmutor 47 11.08.17 12:51 Сейчас в теме
Похоже дело все-таки в несовместимости механизмов msvc и gcc управлением памяти. Судя по этим статьям:
http://www.mingw.org/wiki/Interoperability_of_Libraries_Created_by_Different_­Compiler_Brands
https://chadaustin.me/cppinterface.html

Подружить 1С с MinGW будет сложно или невозможно. Я думал может хоть есть какой пример внешней компоненты на чистом Си. Но нет, зачем-то 1С потребовалось использовать классы.
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Ведущий программист 1С
Омск
зарплата от 70 000 руб. до 110 000 руб.
Полный день

Программист 1С
Екатеринбург
зарплата до 120 000 руб.
Полный день

Консультант-аналитик 1С
Рязань
зарплата до 80 000 руб.
Полный день

Программист 1С
Калининград
зарплата от 60 000 руб. до 80 000 руб.
Полный день

Программист 1С
Рязань
зарплата от 90 000 руб.
Полный день