Вопрос № 43902: Привет всем. Помогите, кто может, плз. Это актуально до 26 числа. прога - бакалаврская.... уже все готово и загвоздка за этой "мелочью" ((
Есть много ДЛЛ - плагины. каждая из них хранит процедуру типа
procedure getval(var s: TMyTyp...Вопрос № 43912: Здравствуйте эксперты !
Я опять про Excel из Дельфи. В хелпе нашел описание как открывать вордовый документ через OLEAutomation и вставлять туда строки. Но и то только строки целиком. А как вставить кусок текста в нужную позицию посреди стр...Вопрос № 43915: Здравсвуйте!
Подскажите как очистить Chart от графиков...чтобы очищать не по одной серии chart1.Series1.Claer, а сразу весь Chart&...
Вопрос № 43.902
Привет всем. Помогите, кто может, плз. Это актуально до 26 числа. прога - бакалаврская.... уже все готово и загвоздка за этой "мелочью" ((
Есть много ДЛЛ - плагины. каждая из них хранит процедуру типа
procedure getval(var s: TMyType);
type Тmytype=record
a: pchar;
b: pchar;
..
end;
процедура эта при вызове выдает ошибку на выходе.
При этом:
1 как я прочитал, у ДЛЛ и ЕХЕ разные менеждеры памяти (для Делфи...), поэтому динамические структуры (а-ля PChar) некорректно передаются. Я поставил по рекомендациям автора статьи FastShareMem и в ДЛЛ и в ЕХЕ. - не помогло
2. варианты с TStringList и подобными не подходят...
3.я пробовал передавать без выделения памяти и вот таким способом:
procedure GetAnswer(var aa: RAnswer);
var i, j: longint;
result: RAnswer;
begin
в проедуре заполнял локальную структуру, а потом выделял память под аргумент:
getmem(aa.а, length(result.а));
CopyMemory(aa.а, result.а, length(result.а));
4. и чего я только не пробовал.
Отправлен: 22.05.2006, 22:30
Вопрос задал: Решетник Д (статус: 6-ой класс)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: sir henry
Здравствуйте, Решетник Д!
Если Вы передаете в функцию какие-то сложные структуры, то передавайте туда указатель, а не саму структуру. Т.е. фактически Вы будете передавать адрес в памяти, по которому расположена Ваша структура. Вот пример:
Type
TMyType
a: PChar;
b: PChar;
end;
...
procedure getval(s: Pointer);
Begin
{Здесь Вы делаете то, что собирались делать с s, только с учетом, что s это теперь указатель}
End;
{Вызов}
Var
tt: ^TMyType;
Begin
...
getval(tt);
...
End;
Ну и для PChar не забывайте память выделять. :)
Ответ отправил: sir henry (статус: Академик) Россия, Красноярск ---- Ответ отправлен: 23.05.2006, 07:29 Оценка за ответ: 5
Отвечает: Лукьяненко Алексей Валериевич
Здравствуйте, Решетник Д!
Еще можно компилировать и Dll, и EXE с использованием run-time пакетов. Тогда менеджер памяти будет общим. Также для строк можно использовать WideString - под них память выделяется не менеджером памяти Delphi, а Windows
Ответ отправил: Лукьяненко Алексей Валериевич (статус: 3-ий класс)
Ответ отправлен: 23.05.2006, 10:05 Оценка за ответ: 5
Вопрос № 43.912
Здравствуйте эксперты !
Я опять про Excel из Дельфи. В хелпе нашел описание как открывать вордовый документ через OLEAutomation и вставлять туда строки. Но и то только строки целиком. А как вставить кусок текста в нужную позицию посреди строки ? По аналогии решил открыть Excel, но когда привязываю Sheet к Bookу выдает ошибку. Объясните что не так ? Или дайте ссылку где почитать, чтобы Вас не напрягать. Текст в приложении.
Вот привожу пример по открытию файла, и связи с таблицей, так как в Вашем примере я так и не понял почему происходит не соответствие типов. Я Вам рекомендую в ручную создавать нужные объекты.
Более подробно советую глянуть в книге "Василий Корняков Программирование документов и приложений MS Office в Delphi"
http://c-books.info/books/load.php?ty=delphi&lng=RU
Также посмотрите мои ответы в вопросах №43320 и №42227
Смотрите пример в приложении:
Приложение:
--------- Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаються события на земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: 8-ой класс)
Ответ отправлен: 23.05.2006, 11:15
Вопрос № 43.915
Здравсвуйте!
Подскажите как очистить Chart от графиков...чтобы очищать не по одной серии chart1.Series1.Claer, а сразу весь Chart&
Удаляем все данные из SeriesList, далее обновляем Chart:
Chart1.SeriesList.Clear;
Chart1.Refresh;
--------- Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаються события на земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: 8-ой класс)
Ответ отправлен: 23.05.2006, 11:52