использовать DLL в ворде

Eugenia_2005

есть некоторое расширение функциональности ворда, дополнительная панелька, умеющая делать некоторые вещи. Реализована она на VB в макросах.
Надо всю эту функциональность реализовать в длл.
Как из ворда использовать дллку?

psm-home

В чём проблема? Делаешь DLLку COM сервером, регистрируешь его, потом в редакторе VBA делаешь Tools->References..., там находишь свою DLL и в проект добавляется ссылка. Можно поднимать твой COM объект, вызывать его методы.

Eugenia_2005

Можно без COM серверов? ДЛЛка должна быть самая обычная, которую надо будет скопировать в нужное место на компе заказчика и чтобы работало.

psm-home

А вот низзя вроде. Голову на отсечение не дам, конечно, но вроде нельзя. А чем COM не угодил? Сложно запустить regsvr32 <mycoolstuff.dll> из ком. строки?

Eugenia_2005

да я в COM не рюхаю ничего
если в дельфях сделать обычную дллку, ее можно будет из ворда использовать, или надо ее как-то COMовской сделать?

psm-home

В Delphi вроде легко делать inproc COM серверы. Мне так помнится, что там даже wizard был для этого (в Delphi 7).

ava3443

> ее можно будет из ворда использовать, или надо ее как-то COMовской сделать
надо будет COM-сервер по-любому делать...

evgen5555

>да я в COM не рюхаю ничего
Парадокс как раз в том, что тут особенно ничего рюхать и не надо.

vini

В Delphi несовпадающие типы строк с микрософтовскими, ты это учти, если что.

bastii

С какими? Там юзают везде basic strings. В Dephi наверно для этого должен быть отдельный тип.

bastii

Может проще будет из VBA в VB6 перенести. Последний умеет dll делать.

vini

Угу Pchar
А вообще я вот статейку нашел для вопрошающего.

kokoc88

COM-сервер делать необязательно. Зависит от того, какая функциональность тебе нужна.

bastii

Кстати, если нет проблем с тем, что Office должен быть 2003, а основная причина почему нужно уйти от макросов на VBA это то, что код распространяется внутри документа. Тогда можно рекомендовать Visual Tool for Office. Там можно будет на VB.NET легко перенести.

Eugenia_2005

Да, статейка оказалось полезной, спасибо.
Но нашел вот что (в обсуждении этой статьи на другом сайте)
Цитата из документации
A common error when working with PChars is to store in a data structure, or return as a value, a local variable. When your routine ends, the PChar will disappear because it is simply a pointer to memory, and is not a reference counted copy of the string. For example:
function title(n: Integer): PChar;
var
s: string;
begin
s := Format("title - %d", [n]);
Result := PChar(s); // DON"T DO THIS
end;
This example returns a pointer to string data that is freed when the title function returns.
Динамически выделять память?
Кто ее освобождать будет тогда?
Оставить комментарий
Имя или ник:
Комментарий: