Здравствуйте, Виталий Брусенцев!
Я обнаружил глюк. Если в тексте статьи последний текст имеет стиль Code (например, С++), то процедура создания XML зависает.
Скачал дистрибутив месяца полтора назад.
Здравствуйте, Constructor, Вы писали:
C>Я обнаружил глюк. Если в тексте статьи последний текст имеет стиль Code (например, С++), то процедура создания XML зависает. C>Скачал дистрибутив месяца полтора назад.
Да, этот глюк известен. Сейчас готовлю новую версию шаблона, в ней он устранен.
При попытке воспользоваться сабжем на WinXP SP1 Eng + Office 2000 SP3 Eng Ворд стабильно рушится, если попытаться пометить текст как "Code -> C++". Остальные стили применяются к тексту абсолютно нормально. Настройки Ворда практически не отличаются от тех, что создаются при установке — только отключена проверка грмматики "на лету" (орфорграфия проверяется, установлено ORFO 2000). На Win2000 SP4 Eng + Office 97 SP2 Eng все в порядке (правда, ORFO 5.0).
WinXP SP1 Eng + Office 97 SP Eng — то же самое (Ворд рушится при попытке пометить текст как код на любом из предлашаемых языков). Снос ORFO и отключение проверки орфографии/грамматики не помогает. Запуск Ворда в режиме совместимости с W2K также не дает положительного результата.
Здравствуйте, SchweinDeBurg, Вы писали:
SDB>WinXP SP1 Eng + Office 97 SP Eng — то же самое (Ворд рушится при попытке пометить текст как код на любом из предлашаемых языков). Снос ORFO и отключение проверки орфографии/грамматики не помогает. Запуск Ворда в режиме совместимости с W2K также не дает положительного результата.
WinXP SP1 Eng + Office XP Pro Eng — ситуация аналогичная.
Если кому-то удавалось воспользоваться "Шаблоном для верстки..." под ХРюшей — буду очень признатен за деление опытом.
Здравствуйте, SchweinDeBurg, Вы писали:
SDB>WinXP SP1 Eng + Office 97 SP Eng — то же самое (Ворд рушится при попытке пометить текст как код на любом из предлашаемых языков). Снос ORFO и отключение проверки орфографии/грамматики не помогает. Запуск Ворда в режиме совместимости с W2K также не дает положительного результата.
Все чудесатее и чудесатее...
Как именно рушится Ворд — выдает какое-либо сообщение об ошибке или с AV?
Попробуй запустить вот такой файлик test.js (просто дабл-кликом в Explorer):
WScript.Echo("Version: "+
ScriptEngineMajorVersion()+"."+ScriptEngineMinorVersion());
var text = "int main(){ return 0; }";
var colorer = new ActiveXObject("RSDN.CodeColorer");
WScript.Echo(colorer.TranslateCode(text, "C/C++"));
и сообщи о результатах, плиз.
... Live as if you were to die tomorrow. Learn as if you were to live forever. -- M.K. Gandhi
Здравствуйте, retalik, Вы писали:
R>Все чудесатее и чудесатее...
В жизни всегда есть место празднику...
R>Как именно рушится Ворд — выдает какое-либо сообщение об ошибке или с AV?
AV и предложение послать report в Редмонд. Одним из первых имен в логе, который предлагается отослать, является ole32.dll.
R>Попробуй запустить вот такой файлик test.js (просто дабл-кликом в Explorer):
А из FARа можно?
Вот результат:
1-й message box:
---------------------------
Windows Script Host
---------------------------
Version: 5.6
---------------------------
OK
---------------------------
2-й message box:
---------------------------
Windows Script Host
---------------------------
<kw>int</kw> main(){ <kw>return</kw> 0; }
---------------------------
OK
---------------------------
Здравствуйте, HeaveN, Вы писали:
HN>Здравствуйте, SchweinDeBurg, Вы писали:
SDB>>WinXP SP1 Eng + Office XP Pro Eng — ситуация аналогичная.
HN>У меня работает без вопросов. Инсталлировал и все. Правда офис русский.
Что забавно: даже под Win98 SE Eng + Office 97 SP2 Eng — и то работает! А под ХРюшей не хочет. Кстати, тот MSXML, который живет под W2K, маркирован как 3.0 SP3 (file version 8.30.9926.0), а тот, что под ХРюшей — как 3.0 SP4 (file version 8.40.9419.0).
Здравствуйте, Yachtsman, Вы писали:
Y>А существует ли в природе XML схема статьи? Больно не хочется ее самому описывать...
Насколько я знаю, нет. А для чего ее понадобилось описывать? Может, эта схема и нам пригодится?
Здравствуйте, Yachtsman, Вы писали:
R>>Насколько я знаю, нет. А для чего ее понадобилось описывать? Может, эта схема и нам пригодится? Y>Вообще, для валидации статей... Хочу попробовать написать клиента для их написания... Для общего, т.с. развития...
Искусственный интеллект на RSDN! Вы задаете тему статьи, а клиент RSDN@Article пишет статью заданного объёма для вас! Нет больше проблем с материалом в журнал!
Здравствуйте, orangy, Вы писали:
O>Искусственный интеллект на RSDN! Вы задаете тему статьи, а клиент RSDN@Article пишет статью заданного объёма для вас!
При попытке генерации XML / HTML версий статьи появляется диалоговое окно с индикатором прогресса, но по окончанию работы ни XML, ни HTML версии статьи в папке не появляется. Причем для другой статьи эти файлы генеряться без проблем.
Re[2]: Ошибка при генерации XML / HTML версий статьи
Здравствуйте, yury.fedorov, Вы писали:
YF>При попытке генерации XML / HTML версий статьи появляется диалоговое окно с индикатором прогресса, но по окончанию работы ни XML, ни HTML версии статьи в папке не появляется. Причем для другой статьи эти файлы генеряться без проблем.
Пришлите мне архив с .doc-файлом — попробую разобраться.
На работе — Win XP SP1 + Office 2003 + RSDN Author Pack 1.6, дома — такая же конфигурация.
На работе все работает, дома — зависает при попытке отформатировать текст. Причем в любой формат кроме Manual. Кроме того, зависает при выборе пункта Language from list. Ваш тест — test.js — выдал первый диалог "Version: 5.6", а второй "<kw>int</kw> main(){ <kw>return</kw> 0; }" только через минуту или две. Что делать, кто виноват?..
Здравствуйте, nzeemin, Вы писали:
N>На работе — Win XP SP1 + Office 2003 + RSDN Author Pack 1.6, дома — такая же конфигурация. N>На работе все работает, дома — зависает при попытке отформатировать текст. Причем в любой формат кроме Manual. Кроме того, зависает при выборе пункта Language from list. Ваш тест — test.js — выдал первый диалог "Version: 5.6", а второй "<kw>int</kw> main(){ <kw>return</kw> 0; }" только через минуту или две. Что делать, кто виноват?..
Проблема с Windows Scripting Host, похоже.
Никакой анти-спайвары не установлено? Я установил MS AntiSpyware, так столкнулся с тем, что выполнение скриптов блокируется.
Здравствуйте, retalik, Вы писали:
R>Проблема с Windows Scripting Host, похоже. R>Никакой анти-спайвары не установлено? Я установил MS AntiSpyware, так столкнулся с тем, что выполнение скриптов блокируется.
Похоже на последствия установленного, а потом снесённого AVP.
Лечится
1. Не могу найти каким образом вставлять исходный код в статью, чтобы он разворачивался
и сворачивался плюсиком, как показано в примере данной статьи для IDL.
При изучении HTML кода видно, что задействована функция "JavaScript" — ToggleCode().
Что надо указать в Word документе, чтобы ее заюзать?
2. При вставке гиперссылок хотелось бы использовать такие рисуночки, как <IMG src="/images/extA.gif" ...
Что надо сделать в Word, чтобы их подключить?
Где посмотреть весь спектр смайликов, имеющихся на сайте?
from __python__ import paradigma
from __future__ import generators
from __waterfall__ import power
Здравствуйте, __WaterFall__, Вы писали:
__W>1. Не могу найти каким образом вставлять исходный код в статью, чтобы он разворачивался __W> и сворачивался плюсиком, как показано в примере данной статьи для IDL.
Надо перед исходником поместить заголовок со стилем Name и начать его с "+" или "-".
__W>2. При вставке гиперссылок хотелось бы использовать такие рисуночки, как <IMG src="/images/extA.gif" ... __W> Что надо сделать в Word, чтобы их подключить?
Надо в свойствах гиперссылки, в поле "примечание", поместить текст "ext" или "file". См. документацию.
__W> Где посмотреть весь спектр смайликов, имеющихся на сайте?
Статьи тут не при чем, смайлики только на форуме (практически все есть в форме ввода сообщения).
Спасибо за советы Витилий,
R>Надо перед исходником поместить заголовок со стилем Name и начать его с "+" или "-".
стиль Name я вчера пробовал, но был вечер, видно я доку читал очень быстро, вот "+" и "-" поставить не догадался, как-то пропустил. Сегодня в доке явно вижу, как ясно и понятно написано, вчера (пивом клянусь) этого не было
R>Надо в свойствах гиперссылки, в поле "примечание", поместить текст "ext" или "file". См. документацию.
всё-равно не понял как писать это "примечание", даже после прочтения доки, например я хочу на какое-нибудь слово сделать абсолютныю ссылку + повесить картинку т.е. например <A href="http://www.my-site.com"><IMG src="http://www.rsdn.ru/images/fileA.gif" border="0" width="28" height="11" align="absmiddle">нажмите сюда пожалуйста</A>. Как это объянить word-у? ну написал я "ext" в поле "примечание", а как к ней приклеить fileA.gif?
R>Статьи тут не при чем, смайлики только на форуме (практически все есть в форме ввода сообщения).
Я не правильно выразился, я имел ввиду не смайлики, а маленькие рисуночки — атрибуты для ссылок <A href= ...
как например <IMG src="/images/extA.gif" ... <IMG src="/images/fileA.gif" ...
Я их наблюдаю в других статьях, стильно. (т.е. список картинок из папки 'images' меня и интересует).
Я так понимаю, что где-то в word-е в атрибутах ссылки надо ставить абсолютные ссылки-атрибуты,
<IMG src="http://www.rsdn.ru/images/fileA.gif" , иначе при открытии локально сгенерированного htm картинки не будут найдены? Или скачать к себе в папку нужные gif?
R>А какую статью Вы пишете?
Я пока не хотел бы называть тему публично, вероятно из-за суеверности, чтобы не сорваться на более насущные дела по дому. Это всё-таки будет моя первая статья для RSDN. Занимает много времени, уже неделю пишу по-вечерам. Дальше должно быть легче. Если закончу, то вы об этом очень скоро узнаете (я её собираюсь выслать на рецензирование).
Скорее всего это будет жанр алгоритмы/математика, хотя там есть небольшой уклон в сторону hardware. Сейчас пишу soft для статьи.
У меня ещё есть 1 вопрос, если я в статью хочу вставить небольшой графический пример, показывающий работу описываемых алгоритмов, могу ли я написать процедурку (например на "JavaScript") и вставить прямо в середину статьи?
или может оформить как отдельный файл htm и сделать ссылку? Как это правильно делается?
from __python__ import paradigma
from __future__ import generators
from __waterfall__ import power
Здравствуйте, __WaterFall__, Вы писали:
__W>Как это объянить word-у? ну написал я "ext" в поле "примечание", а как к ней приклеить fileA.gif?
в ворде ты рисунок не увимдишь, его "приклеит" конвертор в xml
__W>Я так понимаю, что где-то в word-е в атрибутах ссылки надо ставить абсолютные ссылки-атрибуты,
нет
__W>иначе при открытии локально сгенерированного htm картинки не будут найдены? Или скачать к себе в папку нужные gif?
да, заведи в корне диска каталог images с нужными рисунками, тогда увидишь и локально
Здравствуйте, Odi$$ey, Вы писали:
OE>в ворде ты рисунок не увимдишь, его "приклеит" конвертор в xml
Поправочка: в xml его тоже не будет, его сгенерирует XSLT в финальном HTML.
__W>>иначе при открытии локально сгенерированного htm картинки не будут найдены? Или скачать к себе в папку нужные gif?
При генерации локального HTML вообще ставятся абсолютные пути к рисункам (определяется по каталогу установки шаблона). Они верны только для этого компьютера. Но локальный HTML нужен только для просмотра сгенерированной статьи. На сайте будут другие пути.
со списком рисуночков понятно (chmA.gif extA.gif fileA.gif ls.gif ls1.gif ls2.gif)
OE>>в ворде ты рисунок не увимдишь, его "приклеит" конвертор в xml R>Поправочка: в xml его тоже не будет, его сгенерирует XSLT в финальном HTML.
спасибо, как я понял механизм такой
— в xml попадает type="ext"
— в html попадает абсолютный путь <IMG src="C:/Program Files/RSDN/Authoring Pack/Authoring/images/extA.gif"
— при выкладывании на RSDN абсолютный путь киляется
R>При генерации локального HTML вообще ставятся абсолютные пути к рисункам (определяется по каталогу установки шаблона). Они верны только для этого компьютера. Но локальный HTML нужен только для просмотра сгенерированной статьи. На сайте будут другие пути.
+ вопрос:
если я также захочу выложить html, например на свой сайт, мне надо пропатчить html, т.е. поубирать абсолютные пути?
может есть такая опция при генерации? (или скопировать в папку к статье всю папку Authoring и поставить в
свойствах путь к XSL = .\ (я попробовал — получим почти как на сайте <IMG src="./images/extA.gif")?
или все-таки самому писать конвертор?...)
есть второй способ скачать html статью с RSDN, (при условии, если ее опубликуют
мне так никто и не ответил на вопрос, можно ли в word документ вставлять сырой html код, например на "JavaScript"?
from __python__ import paradigma
from __future__ import generators
from __waterfall__ import power
Здравствуйте, Дьяченко Александр, Вы писали:
ДА>В Висте не ставится падает где-то ближе к концу. В офисе 2007 как-то странно работает панелька
А я и не удивлен. Новые версии софта МС всегда требуют переделки более-менее серьезных вещей, связанных с этим софтом...
Здравствуйте, Sheridan, Вы писали:
S>А я и не удивлен. Новые версии софта МС всегда требуют переделки более-менее серьезных вещей, связанных с этим софтом...
Здравствуйте, adontz, Вы писали:
S>>А я и не удивлен. Новые версии софта МС всегда требуют переделки более-менее серьезных вещей, связанных с этим софтом... A>Карфаген должен быть разрушен?
Уже почти собрал обратно
Function FormatRange(content As Range, Format As Boolean, Optional code As Boolean) As String
Dim h As Hyperlink, s As String, Text As String
Dim r As Range, shape As InlineShape, iCode As Integer
Set r = CopyRange(content)
ReplaceText r, "&", "&"
ReplaceText r, "<", "<"
ReplaceText r, ">", ">"
ReplaceText r, "^l", "<BR/>"If Format Then
If Not code Then
Dim temp As Range
Do While r.Hyperlinks.Count > 0
Set h = r.Hyperlinks(1)
Text = h.Range.Text
s = "<A href=""" & Escape(h.address) & """"If h.ScreenTip <> ""Then s = s & " type=""" & h.ScreenTip & """"
s = s & ">" & Text & "</A>"Set temp = h.Range.Duplicate
h.Delete
temp.Text = s
Loop
Do While r.InlineShapes.Count > 0
Set shape = r.InlineShapes(0)
Text = ProcessInlineShape(shape)
Set temp = shape.Range.Duplicate
shape.Delete
temp.Text = Text
Loop
End If
ReplaceFormat
If code Then ReplaceCode content
End If
Set r = CopyRange(content)
FormatRange = Replace(r.Text, vbCr, IIf(code, vbCrLf, ""))
End Function
Падает в выделенном месте 0 элемента нет. Есть 1. Надо или 0 поменять на 1 или заменить do while на for each (покрайней мере у меня прокатило).
Здравствуйте, AndrewVK, Вы писали:
ДА>>их можно и всегда подсвечивать AVK>А можно и никогда не подсвечивать, что будет не хуже.
А бог с ним , но себе я переделал
Здравствуйте, Sheridan, Вы писали:
A>>Карфаген должен быть разрушен? S>Ну еще скажи что я неправ. Достаточно прочитать ветку с корня.
Ну вот если почитать исправиления Дьяченко Александра, то статнет ясно что скрипт с самого начала был не ахти как корректно написан
А вообще твоё утверждение не вполне верно потому что
Там где обратную совместимость общают, она есть. Программы написанные для Windows 2000, запускаются и на ХР и на 2003
Там где её не обещают, её искать не надо. Программы для .Net Frameword 1.1 зачастую не корректно работают на .Net Framework 2.0
Здравствуйте, adontz, Вы писали:
A>>>Карфаген должен быть разрушен? S>>Ну еще скажи что я неправ. Достаточно прочитать ветку с корня. A>Ну вот если почитать исправиления Дьяченко Александра, то статнет ясно что скрипт с самого начала был не ахти как корректно написан
Добавлена поддержка MS Office 2007
Инсталлятор совместим с Windows Vista
Устранено ложное срабатывание некоторых антивирусов
Исправлена ошибка при создании Unicode-версии xml
Название таблицы (подпись) Поддерживается. Для этого сразу после таблицы вставьте абзац со стилем "Name" и текстом названия.
Таблица 1. Поддержка таблиц в шаблоне RSDN Article
Собственно, вопрос — а почему после? Общепринято таблицы (как и код) именовывать ДО...
У меня есть статья в формате этого шаблона. Она уже публиковалась в RSDN Magazine.
Так вот если ее пытаться преобразовать в HTML в Word 2007, то происходят ошибки.
В Word 2003 все работает. Пробовал как версию 1.6, так и 1.7.
Могу предоставить файл со статьей для повторения ошибки.
Евгений Рыжков
ООО "СиПроВер"
Re: Шаблон для верстки статей RSDN - список с кодом
День добрый.
Такой вопрос — имеется список (OL), хочется в его элементы вставить блоки кода. Как это дело правильно оформляется в документе? При использовании параграфов, естественно, ломается нумерация в результирующем xml.
Спасибо.
Здравствуйте, Andrew S, Вы писали:
AS>Такой вопрос — имеется список (OL), хочется в его элементы вставить блоки кода. Как это дело правильно оформляется в документе? При использовании параграфов, естественно, ломается нумерация в результирующем xml.
текущая версия шаблона тут бессильна, надо просто нумеровать вручную, без OL
Очень неудобно, что в шаблоне нет автоматической нумерации заголовков, то есть абзацев стилей PART, SECTION, SUBSECTION — приходится нумеровать вручную, что при учете постоянных изменений статьи (перекомпоновки) заставляет уделять этому лишнее внимание и время.
Стандартная нумерация MS Word отражается некорректно в генерируемый XML, а стиль OL для нумерации заголовков не подходит — выше обсуждали про прерывание OL другими стилями. С другой стороны, а зачем нам вообще нумерация заголовков в XML? XML имеет иерархическую структуру, а потому шаблон XSL-преобразования может спокойно вычислить номер любого заголовка проанализировав XML-дерево на этапе построения HTML.
Решение (то, чем могу помочь я)
В принципе, автоматическую нумерацию заголовков и проставление номеров в содержании я сделал: изменил в articles.xsl соответствующие шаблоны PART, SECTION, SUBSECTION. Скорее всего сделал не очень красиво, можно было всю логику нумерации вынести всего в один шаблон (собственно — HEADER). Просто лень было сильно заморачиваться, сделал copy-paste-ом. В цитировании выделил внесенные изменения.
Решение (то, что может сделать скорее всего только автор)
И все бы хорошо, но при внесении описанных выше изменений в шаблон articles.xsl заголовки всех старых статьей, в которых авторы мучались и расставляли нумерацию вручную, будут пронумерованы дважды, то есть увидим автоматический номер и далее текст ручной нумерации. Посему у меня просьба-предложение автору темы:Сделать настройку в свойствах документа "Автоматически нумеровать заголовки" — кнопка true/false. Она должна быть по умолчанию сброшена, но если выставлена, то в XML-документ должен быть сгенерирован, к примеру, такой элемент ARTICLE/AUTO-NUMBERING-HEADER.
Внести в XSL-преобразование статьи указанные выше мною изменения, обернув их в <xsl:if test="ARTICLE/AUTO-NUMBERING-HEADER">...</xsl:if> — и в RSDN Authoring Pack, и на сайт.
По возможности все же вынести всю логику формирования номера заголовка в шаблон HEADER.И вуаля! И волки сыты, и овцы целы: старые статьи, пронумерованные вручную, и новые, пронумерованные автоматически, будут отображаться корректно.
Изменения по-моему плевые, не должны отнять и часа. Виталий, если у вас есть время, сделайте, пожалуйста, авторам RSDN хорошо!
Re[3]: Шаблон для верстки статей RSDN - список с кодом
AS>>Такой вопрос — имеется список (OL), хочется в его элементы вставить блоки кода. Как это дело правильно оформляется в документе? При использовании параграфов, естественно, ломается нумерация в результирующем xml.
OE>текущая версия шаблона тут бессильна, надо просто нумеровать вручную, без OL
К сожалению, это не решит проблемы целиком — форматирование все-равно будет испорчено.
Сравним.
Правильный вариант: text1
code1
text1
text2
code2
text2
То, что получается "вручную":
1. text1
code1
text1
2. text1
code1
text1
Очевидным образом, это совсем не то, что хочется видеть И это при том, что в сообщении нужное форматирование поддерживается без проблем.
Не проще нумерованный список заменить секциями (заголовок H5)? А по поводу того, чтобы они автоматически нумеровались давайте пинать автора (см. Автоматическая нумерация заголовоков
R>Не проще нумерованный список заменить секциями (заголовок H5)? А по поводу того, чтобы они автоматически нумеровались давайте пинать автора (см. Автоматическая нумерация заголовоков
Как его можно заменить секциями? Форматирование (отступы) различается.
А вот как раз автоматическая нумерация заголовков мне особо не нужна — если посмотреть статьи на рсдн, это редко где используется (если вообще где-то используется), и нужность такой фичи "в целом" мне лично представляется довольно сомнительной. Тем более, что правильная нумерация — многоуровневая, и сделать ее а-ля ворд довольно сложно, и нужно это в основном для сложных и формальных документов, к коим статьи никоим образом не относятся.
Здравствуйте, Andrew S, Вы писали:
AS> Как его можно заменить секциями? Форматирование (отступы) различается.
И ладно, главное логически показать, что SECTIONs — есть перечисление элементов, которые входят в PART (ну или SUBSECTIONs в SECTION) и нумеруются в порядке следования. Если не рюшечки, а ехать — одно и тоже.
AS>А вот как раз автоматическая нумерация заголовков мне особо не нужна
Предложение было сделать в качестве опциональной функциональности, по умолчанию отключенной.
AS>если посмотреть статьи на рсдн, это редко где используется (если вообще где-то используется)
Используется, неоднократно. И будет активно использоваться, если процесс автоматизировать: как сейчас — неудобно, потому и не пользуются.
AS>и нужность такой фичи "в целом" мне лично представляется довольно сомнительной.
Посмотрите любую серьезную книгу.
Как минимум, как ссылаться из одной главы на другую: "информацию см. в главе "Вот такое вот название главы" или как стандарт ссылок (изображения, таблицы и т.п.) "см. главу 2.1"?
AS>Тем более, что правильная нумерация — многоуровневая, и сделать ее а-ля ворд довольно сложно
Гм... почему сложно-то? Я уже сделал, см. изменения сделанные мною в вашем XSL-преобразовании по той же ссылке: сделал так, чтобы все работало при условии "ничего не ломая". А многоуровневость действительно не нужна, для этого вам придется переделать всю структуру вашего XML-формата. Что при этом делать со старыми статьями, а?
AS>и нужно это в основном для сложных и формальных документов, к коим статьи никоим образом не относятся.
Не согласен. Статьи на этом ресурсе достаточно сложные и формальные документы.
PS Сделайте, плиз, там же работы совсем ничего...
Re[7]: Шаблон для верстки статей RSDN - список с кодом
AS>> Как его можно заменить секциями? Форматирование (отступы) различается. R>И ладно, главное логически показать, что SECTIONs — есть перечисление элементов, которые входят в PART (ну или SUBSECTIONs в SECTION) и нумеруются в порядке следования. Если не рюшечки, а ехать — одно и тоже.
Заголовок и перечисление — _логически_ разные элементы. Период. По остальному — я свое мнение уже изложил, второй раз писАть то же самое смысла не вижу — все-равно решать команде RSDN, нужно им это или нет.
Здравствуйте, rsn81, Вы писали:
R>PS Сделайте, плиз, там же работы совсем ничего...
Блин, принял вас за автора темы.
Как всегда понимаю все по-своему, надо спать больше 4 часов в день, пожалуй.
Function InitRsdnMlAutomation() As Boolean
If rsdnML Is Nothing Then Set rsdnML = CreateObject("RsdnMlAutomation")If rsdnML Is Nothing Then
MsgBox"Не удается создать объекта RsdnMlAutomation. Переустановите 'RSDN Authoring Pack'"
InitRsdnMlAutomation = False
Else
InitRsdnMlAutomation = True
End If
End Function
FDS>Function InitRsdnMlAutomation() As Boolean
FDS> If rsdnML Is Nothing Then Set rsdnML = CreateObject("RsdnMlAutomation")
FDS> If rsdnML Is Nothing Then
FDS> MsgBox"Не удается создать объекта RsdnMlAutomation. Переустановите 'RSDN Authoring Pack'"
FDS> InitRsdnMlAutomation = False
FDS> Else
FDS> InitRsdnMlAutomation = True
FDS> End If
FDS>End Function
FDS>
Скорее всего одно из следующих:
1. Слишком высокий уровень защиты не дающий создать ком-объект. Нужно в настройках понизить уровень безопасности до среднего. Тогда будет даваться предупреждение, но объекты загрузить будет можно. На вопрос нужно ответить положительно.
2. На машине несколько фрэймворков и ворд не может выбрать конкретный. Подобрее смотри здесь
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, FDSC, Вы писали:
VD>4. Word 64-битный. Тут только установка 32-битного ворда поможет.
VD>Если ни один варианта не поможет, будем думать дальше.
Прошу прощения, а можно доработать authority pack для поддержки 64-битной OS и офиса? Как-то это перебор, ставить параллельно с 64-битным ещё и 32-битный офис только лишь для написания статьи на rsdn. Или поднимать виртуалку с 32-битной системой...
Здравствуйте, SGHouse, Вы писали:
SGH>Здравствуйте, VladD2, Вы писали:
VD>>Здравствуйте, FDSC, Вы писали:
VD>>4. Word 64-битный. Тут только установка 32-битного ворда поможет.
VD>>Если ни один варианта не поможет, будем думать дальше.
SGH>Прошу прощения, а можно доработать authority pack для поддержки 64-битной OS и офиса? Как-то это перебор, ставить параллельно с 64-битным ещё и 32-битный офис только лишь для написания статьи на rsdn. Или поднимать виртуалку с 32-битной системой...
Сорри, ошибся в названии — authority pack -> Authoring Pack.
Здравствуйте, SGHouse, Вы писали:
SGH>Прошу прощения, а можно доработать authority pack для поддержки 64-битной OS и офиса? Как-то это перебор, ставить параллельно с 64-битным ещё и 32-битный офис только лишь для написания статьи на rsdn. Или поднимать виртуалку с 32-битной системой...
Офторп: Вообще-то МС сам не рекомендует ставить 64-ый офис (прямо в инсталляторе).
Проблема в том, что наше расширение, по идее, не должно зависеть от битности офиса. Оно написано на дотнете и ВБА. Но, почему-то, я уже слышу третий отклик о том, что оно не работает под 64-битным офисом. Причем у меня нет идей как понять, что не так. Там COM. А он не прозрачен до чертиков.
Попытаюсь поставить себе (еще раз) 64-битный офис и пошаманить. Но обещать ничего не могу.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, SGHouse, Вы писали:
SGH>>Прошу прощения, а можно доработать authority pack для поддержки 64-битной OS и офиса? Как-то это перебор, ставить параллельно с 64-битным ещё и 32-битный офис только лишь для написания статьи на rsdn. Или поднимать виртуалку с 32-битной системой...
VD>Офторп: Вообще-то МС сам не рекомендует ставить 64-ый офис (прямо в инсталляторе).
VD>Проблема в том, что наше расширение, по идее, не должно зависеть от битности офиса. Оно написано на дотнете и ВБА. Но, почему-то, я уже слышу третий отклик о том, что оно не работает под 64-битным офисом. Причем у меня нет идей как понять, что не так. Там COM. А он не прозрачен до чертиков.
VD>Попытаюсь поставить себе (еще раз) 64-битный офис и пошаманить. Но обещать ничего не могу.
Я, конечно, в дотнете не силён, но попробую помочь предположениями.
Хотя дотнет проекты по натуре кросс-платформенны, но почему-то у меня в Visual Studio 2008 в настройках C#-проекта в разделе "построение" есть такая интересная опция "конечная платформа"... И там можно выбрать "Any CPU", "x32", "x64". Собственно, первый вопросец: у Вас проект собирается под Any CPU?
Есть несколько типов COM-объектов, один из них — это inproc. По сути это обыкновенная dll'ка. 32-разрядную dll-ку можно подгрузить только 32-разрядный процесс, а 64-разрядную — в, соответственно, 64-разрядный. А потому в 64-разрядной OS в том, что относится к регистрации COM-компонентов, есть две, дублирующие друг друга, ветви реестра. Если приложение 32-разрядное, то при вызове COM-библиотеки ему "подставляется" один вариант ветви, а если 64-разрядное — другой. И получается ошибка "не могу создать ActiveX компонент".
Могу предположить следующее: Ваша dll регистрируется как inproc-сервер в COM-ветви для 32-разрядных приложений. А 64-разрядный MS Word, выполняя макрос и пытаясь создать соответствующий COM-объект, обращается к 64-разрядной COM-ветви реестра.
Здравствуйте, SGHouse, Вы писали:
SGH>Хотя дотнет проекты по натуре кросс-платформенны, но почему-то у меня в Visual Studio 2008 в настройках C#-проекта в разделе "построение" есть такая интересная опция "конечная платформа"... И там можно выбрать "Any CPU", "x32", "x64". Собственно, первый вопросец: у Вас проект собирается под Any CPU?
Ну, я вообще-то и в донтете, и в студии, и ком разбираюсь довольно хорошо. Естественно, сборки Any CPU. Правда, в них есть микроскопический объем платформно-зависимого кода. В нем, конечно, возможна ошибка. Но в любом случае они не должны были бы приводить к тому что сборку нельзя загрузить. Должны были бы быть рантайм-ылеты.
Как, кстати, выглядят проблемы с шаблоном в 64-битном Офисе? Говорит, что не может создать объект?
SGH>Есть несколько типов COM-объектов, один из них — это inproc. По сути это обыкновенная dll'ка.
Я в курсе. Если заглянуть в список моих статей, то можно заметить, что 10 лет назад я плотно занимался КОМ-ом.
SGH>32-разрядную dll-ку можно подгрузить только 32-разрядный процесс, а 64-разрядную — в, соответственно, 64-разрядный. А потому в 64-разрядной OS в том, что относится к регистрации COM-компонентов, есть две, дублирующие друг друга, ветви реестра. Если приложение 32-разрядное, то при вызове COM-библиотеки ему "подставляется" один вариант ветви, а если 64-разрядное — другой. И получается ошибка "не могу создать ActiveX компонент".
Приложение дотнетное. Потому и не понятно, почему не работает. Возможно проблемы с регистрацией. Регистрация делается встроенным студийным инсталлятором (из VS 2008). У сборки просто установлено свойство Register установлено в vsdrpCOM. Что он там делает я не знаю.
SGH>Могу предположить следующее: Ваша dll регистрируется как inproc-сервер в COM-ветви для 32-разрядных приложений. А 64-разрядный MS Word, выполняя макрос и пытаясь создать соответствующий COM-объект, обращается к 64-разрядной COM-ветви реестра.
Возможно.
Как посмотреть HKEY_CLASSES_ROOT для 64-битных комовских сборок?
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, SGHouse, Вы писали:
SGH>>Хотя дотнет проекты по натуре кросс-платформенны, но почему-то у меня в Visual Studio 2008 в настройках C#-проекта в разделе "построение" есть такая интересная опция "конечная платформа"... И там можно выбрать "Any CPU", "x32", "x64". Собственно, первый вопросец: у Вас проект собирается под Any CPU?
VD>Ну, я вообще-то и в донтете, и в студии, и ком разбираюсь довольно хорошо. Естественно, сборки Any CPU. Правда, в них есть микроскопический объем платформно-зависимого кода. В нем, конечно, возможна ошибка. Но в любом случае они не должны были бы приводить к тому что сборку нельзя загрузить. Должны были бы быть рантайм-ылеты.
VD>Как, кстати, выглядят проблемы с шаблоном в 64-битном Офисе? Говорит, что не может создать объект?
SGH>>Есть несколько типов COM-объектов, один из них — это inproc. По сути это обыкновенная dll'ка.
VD>Я в курсе. Если заглянуть в список моих статей, то можно заметить, что 10 лет назад я плотно занимался КОМ-ом.
Прошу прощения, если мои предположения оказались чересчур тривиальными.
SGH>>32-разрядную dll-ку можно подгрузить только 32-разрядный процесс, а 64-разрядную — в, соответственно, 64-разрядный. А потому в 64-разрядной OS в том, что относится к регистрации COM-компонентов, есть две, дублирующие друг друга, ветви реестра. Если приложение 32-разрядное, то при вызове COM-библиотеки ему "подставляется" один вариант ветви, а если 64-разрядное — другой. И получается ошибка "не могу создать ActiveX компонент".
VD>Приложение дотнетное. Потому и не понятно, почему не работает. Возможно проблемы с регистрацией. Регистрация делается встроенным студийным инсталлятором (из VS 2008). У сборки просто установлено свойство Register установлено в vsdrpCOM. Что он там делает я не знаю.
SGH>>Могу предположить следующее: Ваша dll регистрируется как inproc-сервер в COM-ветви для 32-разрядных приложений. А 64-разрядный MS Word, выполняя макрос и пытаясь создать соответствующий COM-объект, обращается к 64-разрядной COM-ветви реестра.
VD>Возможно.
VD>Как посмотреть HKEY_CLASSES_ROOT для 64-битных комовских сборок?
VD>ЗЫ
VD>Со своей стороны хочу попробовать описанные здесь действия. Есть проблема связанная с выбором версии дотнета вордовским процессом. Возможно причина именно в ней, а не в 64-битности.
VD>Так же прошу как можно боле подробно описать симптомы возникающие в 64-битном ворде.
Я смог запустить Ваш код на 64-битном ворде. Проблема не в дотнет-сборке, она, действительно, работает прозрачно и на 32- и на 64-битной платформе. Проблема и не в выборе версии дотнета. Вашу рекомендацию (здесь
) я попробовал ещё до того, как написать сюда первое сообщение.
Проблема в регистрации. Подробно про маппинг ветвей реестра я нашёл здесь. В деталях ситуация следующая. Я поставил AuthoringPack "just for me", и он зарегистрировал свой ProgId в ветви HKCU\Software\Classes\RsdnMlAutomation. CLSID {xxx}, указанный там, ссылается на HKCU\Software\Classes\Wow6432Node\CLSID\{xxx}, что объясняется информацией, приведённой по ссылке выше. Получается, что 32-битное приложение, обращаясь к HKCU\Software\Classes\CLSID\{xxx} в реальности обращается в ...\Wow6432Node\... (маппинг делается OS) и получает весь блок информации этого CLSID'а. А 64-битное приложение обращается к реальной ветви HKCU\Software\Classes\CLSID\, а там CLSID'а {xxx} нет. В итоге, просто скопировав этот ключ из HKCU\Software\Classes\Wow6432Node\CLSID\ в HKCU\Software\Classes\CLSID\ я получил нормально работающий AuthoringPack.
Здравствуйте, SGHouse, Вы писали:
SGH>Проблема в регистрации. Подробно про маппинг ветвей реестра я нашёл здесь. В деталях ситуация следующая. Я поставил AuthoringPack "just for me", и он зарегистрировал свой ProgId в ветви HKCU\Software\Classes\RsdnMlAutomation. CLSID {xxx}, указанный там, ссылается на HKCU\Software\Classes\Wow6432Node\CLSID\{xxx}, что объясняется информацией, приведённой по ссылке выше. Получается, что 32-битное приложение, обращаясь к HKCU\Software\Classes\CLSID\{xxx} в реальности обращается в ...\Wow6432Node\... (маппинг делается OS) и получает весь блок информации этого CLSID'а. А 64-битное приложение обращается к реальной ветви HKCU\Software\Classes\CLSID\, а там CLSID'а {xxx} нет. В итоге, просто скопировав этот ключ из HKCU\Software\Classes\Wow6432Node\CLSID\ в HKCU\Software\Classes\CLSID\ я получил нормально работающий AuthoringPack.
Спасибо за помощь!
В ближайшее время постараюсь описать ситуацию в статье, а потом попробую придумать что-то, чтобы инсталлятор правильно регистрировал КОМ-объекты в реестре. Боюсь, что придется переходить с инсталлятор встроенного в студию на Wix.
Хотелось бы еще попросить проверить корректность работы самой интеграции в 64-битном окружении (так как она не тестировалась).
Попробуйте сгенерировать ХМЛ (нажать соответствующую кнопку в тулбаре) с ошибками. При этом должно появиться окно со списком ошибок. Далее попробуйте изменить размеры этого окна. Дело в том, что там используется хак. Окна форм в ворде не ресайзятся. Я использовал SetWindowLong(hwnd, GWL_STYLE, L2 :> IntPtr); для того чтобы можно было изменять их размеры. Причем код там не тривиальный.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, SGHouse, Вы писали:
SGH>Проблема в регистрации. Подробно про маппинг ветвей реестра я нашёл здесь. В деталях ситуация следующая. Я поставил AuthoringPack "just for me", и он зарегистрировал свой ProgId в ветви HKCU\Software\Classes\RsdnMlAutomation. CLSID {xxx}, указанный там, ссылается на HKCU\Software\Classes\Wow6432Node\CLSID\{xxx}, что объясняется информацией, приведённой по ссылке выше. Получается, что 32-битное приложение, обращаясь к HKCU\Software\Classes\CLSID\{xxx} в реальности обращается в ...\Wow6432Node\... (маппинг делается OS) и получает весь блок информации этого CLSID'а. А 64-битное приложение обращается к реальной ветви HKCU\Software\Classes\CLSID\, а там CLSID'а {xxx} нет. В итоге, просто скопировав этот ключ из HKCU\Software\Classes\Wow6432Node\CLSID\ в HKCU\Software\Classes\CLSID\ я получил нормально работающий AuthoringPack.
Кстати, сделайте, пожалуйста, экспорт этой (этих) веток в формате regex.exe. Чтобы другие могли им воспользоваться пока не решим проблем с инсталлятором.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Боюсь, что придется переходить с инсталлятор встроенного в студию на Wix.
.\snippets\WordToRsdnMlConverter\Setup\Setup.vdproj — это оно? Я со встроенным в студию деплоем не работал, но, на первый взгляд, перетащить это на Wix — не проблема, давай сделаю (с учетом этого обсуждения по поводу реестра)?
Здравствуйте, kochetkov.vladimir, Вы писали:
VD>>Боюсь, что придется переходить с инсталлятор встроенного в студию на Wix.
KV>.\snippets\WordToRsdnMlConverter\Setup\Setup.vdproj — это оно? Я со встроенным в студию деплоем не работал, но, на первый взгляд, перетащить это на Wix — не проблема, давай сделаю (с учетом этого обсуждения по поводу реестра)?
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, SGHouse, Вы писали:
SGH>>Проблема в регистрации. Подробно про маппинг ветвей реестра я нашёл здесь. В деталях ситуация следующая. Я поставил AuthoringPack "just for me", и он зарегистрировал свой ProgId в ветви HKCU\Software\Classes\RsdnMlAutomation. CLSID {xxx}, указанный там, ссылается на HKCU\Software\Classes\Wow6432Node\CLSID\{xxx}, что объясняется информацией, приведённой по ссылке выше. Получается, что 32-битное приложение, обращаясь к HKCU\Software\Classes\CLSID\{xxx} в реальности обращается в ...\Wow6432Node\... (маппинг делается OS) и получает весь блок информации этого CLSID'а. А 64-битное приложение обращается к реальной ветви HKCU\Software\Classes\CLSID\, а там CLSID'а {xxx} нет. В итоге, просто скопировав этот ключ из HKCU\Software\Classes\Wow6432Node\CLSID\ в HKCU\Software\Classes\CLSID\ я получил нормально работающий AuthoringPack.
VD>Кстати, сделайте, пожалуйста, экспорт этой (этих) веток в формате regex.exe. Чтобы другие могли им воспользоваться пока не решим проблем с инсталлятором.
В каком формате? Наверное, regedit.exe? Экспорт в аттаче. Однако нужно помнить, это пути там к установке получаются жёстко прописанными. Кто ставит в другую директорию, работать не будет. Кроме того деинсталляции для этого "хака" нет.
Здравствуйте, SGHouse, Вы писали:
SGH>Здравствуйте, VladD2, Вы писали:
VD>>Здравствуйте, SGHouse, Вы писали:
SGH>>>Проблема в регистрации. Подробно про маппинг ветвей реестра я нашёл здесь. В деталях ситуация следующая. Я поставил AuthoringPack "just for me", и он зарегистрировал свой ProgId в ветви HKCU\Software\Classes\RsdnMlAutomation. CLSID {xxx}, указанный там, ссылается на HKCU\Software\Classes\Wow6432Node\CLSID\{xxx}, что объясняется информацией, приведённой по ссылке выше. Получается, что 32-битное приложение, обращаясь к HKCU\Software\Classes\CLSID\{xxx} в реальности обращается в ...\Wow6432Node\... (маппинг делается OS) и получает весь блок информации этого CLSID'а. А 64-битное приложение обращается к реальной ветви HKCU\Software\Classes\CLSID\, а там CLSID'а {xxx} нет. В итоге, просто скопировав этот ключ из HKCU\Software\Classes\Wow6432Node\CLSID\ в HKCU\Software\Classes\CLSID\ я получил нормально работающий AuthoringPack.
VD>>Кстати, сделайте, пожалуйста, экспорт этой (этих) веток в формате regex.exe. Чтобы другие могли им воспользоваться пока не решим проблем с инсталлятором.
SGH>В каком формате? Наверное, regedit.exe? Экспорт в аттаче. Однако нужно помнить, это пути там к установке получаются жёстко прописанными. Кто ставит в другую директорию, работать не будет. Кроме того деинсталляции для этого "хака" нет.
Если аттач не прикрепился, вот, на всякий случай, содержимое. Благо, оно небольшое.
Здравствуйте, SGHouse, Вы писали:
VD>>Кстати, сделайте, пожалуйста, экспорт этой (этих) веток в формате regex.exe. Чтобы другие могли им воспользоваться пока не решим проблем с инсталлятором.
SGH>В каком формате? Наверное, regedit.exe? Экспорт в аттаче.
В каком еще атаче? Это же форум.
SGH>Однако нужно помнить, это пути там к установке получаются жёстко прописанными. Кто ставит в другую директорию, работать не будет. Кроме того деинсталляции для этого "хака" нет.
Это, я думаю, должно быть понятно тем кто захочет использовать этот скрипт.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.