Передача строки без выделения памяти из функции на Go в код на C (часть 1)

Документация по CGO весьма скудно освещает вопрос передачи строк. Сказано только одно – используйте функцию C.CString() для преобразования объекта string в понятный коду на C указатель на буфер со строкой, завершенной нулем — char*. Все хорошо, но при этом выделяется блок памяти (malloc), который необходимо удалять вызовом (free), закончив его использование. Несколько расточительно, если функцию

Перехват вызова функций заменой байтов заголовка инструкциями JMP или CALL

В одной из предыдущих статей я описывал метод перехвата функций, используя таблицу импорта. Данный метод более универсален, так как дает возможность осуществлять перехват вызова функций, если известен только их адрес в памяти (ограничения приведены ниже). Однако он и более сложен, поскольку, как дальше будет показано, требует от кода модифицирования заголовка функции навыков дизассемблирования. Суть метода в

API DLL или COM объект? Создание COM объектов без регистрации

При создании многокомпонентных проектов одним из основных вопросов, стоящих перед проектировщиком, является вопрос о том, каким, собственно, образом компоненты будут взаимодействовать друг с другом. Если мы говорим о компонентах, экспортирующих некий набор функций (по сути, библиотеках), то механизмом взаимодействия может быть использование COM интерфейсов и традиционный импорт/экспорт функций и классов. Создание COM объектов «на лету»

Асинхронный COM под Windows Vista и Windows 7

Технология COM (Component Object Model) развивается уже почти двадцать лет. До сих пор на ней построена работа подавляющего числа компонентов системы. Думаю, что так и будет продолжаться в ближайшем будущем. Асинхронный COM — это вариант использования этой технологии. Некоторые приложения начала 2000-х использовали его для построения высоконагруженных серверов. Все не так безоблачно для Асинхронного COM.