sitelogo

By

Advanced marshaling в C#

Сейчас работаю над сложным, но интересным проектом в C# с кучей хаков и перехватчиков API и COM интерфейсов. И у меня появилось несколько новых вещей которые я бы хотел записать. Надеюсь поможет кому-то при написании чего-то подобного, не сорвав сроки. Подобная документация конечно имеется в интернете (маршалинг в С#) тем не менее я хочу расширить тему и остановиться на конкретных примерах импорта из DirectX и других библиотек.

В сети есть полно разных оберток для использования этих технологий, и все же, мне не нравится использовать непереносимые, монструозные решения типа C++/CLI или кучи дополнительных DLL, когда размер DLL обертки имеет размер, приближенный к самой DLL, которую импортируем (пример — SlimDX).

Читать далее

By

Синхронизация OpenSSL в многопоточных приложениях

Сегодня на работе пофиксил багу, связанную с зависанием при выходе из приложения. Реализация класса TLS сокетов иллюстрировала попытки разработчика впихнуть невпихуемое, но показать этот код я к сожалению не могу. Если кратко, были три основных метода Receive, Send и Close, работавшие из разных потоков. В каждом методе было по мьютексу, так как класс еще и обязан был поддерживать блокирующие и неблокирующие сокеты. Если бы использовался один мьютекс на весь класс, тогда блокирующий SSL_read мог бы заблочить все остальные потоки, когда те попытались бы записать данные или закрыть сокет.
Читать далее