Так ведь у ддлки нет своего stdout, он берется от процесса. Так что если в параллельных процессах ничего в него не выводится, то перенаправив стандартный вывод и вызвав функцию из дллки, можно перехватить то, что эта функция должна вывести.
Есть вероятность того, что те, кто будет работать с моим кодом, про плейсхолдеры знать не будут. А хотелось бы что-нибудь универсальное и с защитой от дурака.
Так фишка в том, что все равно неправильно =( Уже подумываю сделать многопроходную обработку: убрать сначала строки, потом сделать замены, и под конец вернуть строки на нужные места.
Да, я хочу их все заменить. Причем ваш вариант не сработает правильно со строкой типа SELECT * FROM table WHERE qwerty="{123}". У меня сейчас стоит такая замена: $sql = preg_replace('|^([^"\']+)\{([\w\d]+)\}|', '$1`prefix_$2`', $sql);
Она более правильна, но все равно не заменит все подобные плейсхолдеры.
Про glColorMask сам не знал, каюсь. С текстурами мой способ результат даст, потому что в OpenGL при отображении текстурированного полигона происходит смешивание цветов (поэтому и делают glColor4f(1, 1, 1, 1) перед отрисовкой текстурированного полигона). В случае с массивом цветов — да, не поможет, если этот массив перед отображением не обработать.
В любом случае ваше решение с glColorMask универсальнее :)