| Цитата |
|---|
bedvit написал: Внешний API будет? |
Для начала это выглядит (уже так выглядит) просто как расширение стандартной VBE7.dll = "простой" набор плоских функций.., ну можно к ним будет еще добавить свою реализацию Словаря. Но...
| Цитата |
|---|
bedvit написал: хорошо продуманной реализация дело не простое |
Я скажу больше, реализовать полностью, то, что я хотел бы для меня представляется почти не возможным, учитывая нехватку времени, профессионализма, мотивации, смены настроения и т.д. Обясню на простом примере. Есть прекрасная функция InStr которая очень быстрая, но мне не нравится в ней один момент - у нее параметры реализованы через Variant
| Код |
|---|
VARIANT _stdcall InStr(
[in, optional] VARIANT* Start,
[in, optional] VARIANT* String1,
[in, optional] VARIANT* String2,
[in, optional, defaultvalue(0),
custom(270D72B0-FFB8-11CF-A4BD-00A0C90F26EE, 1) |
Это какбы не очень хорошо, но с этим я могу смириться.. У этой функции есть "сестра" InStrB, такая же прекрасная, предназначенная для Строк Ansi. Это прекрасно, но я решаю, что мне не хватает у функций InStr 5го параметра - длины участка строки, на котором функция должна искать подстроку. Я делаю реализация и называю ее InStrLen, что выглядит также лаконично и понятно. Также я делаю реализацию InStrEnd, которую по названию также понятно, что это за функция. Потом я хочу еще сделать реализацию InStr для байтовых массивов и также даю ей понятное название InStrByt. Дальше по накатанной InStrLenByt, InStrEndByt, .. дальше InStrRevLenByt - тут уже как-то не лаконично и не запоминающееся, уже какая-то ерунда начинается. Фактически возникает такая ситуация, назовем ее нейминг-хелл, когда запас простых понятных и вто же время кратких имен начинает исчерпываться. Конечно это одна из основных причин, почему было придумано OOP, поскольку оно решает эту проблемму - создаем класс строки и для нее методы Find, FindB, FindRev и т.д., потом создаем класс байтового массива и для просто создаем интерфейсы с теми же самыми именами. Но я не хочу создавать конечно же кучу COM-классов для всего на свете, это не тот путь который мне нравится. Тут мы подходим к финальной стадии, того, что я хотел бы создать - трейты (по аналогии с трейтами в языке Rust). Трейты - это такие штуки, которые бы позволили добавлять свои "интерфейсы" для всего на свете. Но как их реализовать на VBA? Для этого нужно, во-первых, создать дополнительный вспомогательный текстоый редактор для VBA, в котором можно создавать эти трейты и использовать, а из него уже текст должен будет раскладываться в стандартный VBA-код и попадать в оригинальный редактор VBA. Вот, собственно, такая, относительно простая мысль, но не так уж простая в реализации.