Советы по Delphi. Версия 1.4.3 от 1.1.2001 - Валентин Озеров
- Дата:20.06.2024
- Категория: Компьютеры и Интернет / Программирование
- Название: Советы по Delphi. Версия 1.4.3 от 1.1.2001
- Автор: Валентин Озеров
- Просмотров:5
- Комментариев:0
Шрифт:
Интервал:
Закладка:
push x { помещаем параметры в обратном порядке }
push word ptr a2 + 2 { если 32-битная величина передается в этих двух шагах, то начинаем с самой «высокой» (high) части }
push word ptr a2
push word ptr a1 + 2
push word ptr a1
call func
add sp, 10 { восстанавливаем стек добавлением вытолкнутых байтов. Обратите внимание на то, что func не была вытолкнута }
end;
procedure buildolefunction;
var
f: pointer;
reslt: integer;
begin
f := @olefunction;
{ --- }
reslt := callolefunction(f, 'Здравствуй, мир', 1000000, 25);
{ --- }
end;
begin
{ --- }
end.
На моем компьютере это компилируется без проблем. Должно работать и у вас. Предупреждение. Обращение к методам должно быть немного другим, нежели к функциям.
Как я могу избавиться от 'зарегистрированного' имени сервера, если я не хочу использовать его далее?
Nomadic советует:
Запустите исполняемый файл сервера с ключом /UNREGSERVER:
MYSERVER.EXE /UNREGSERVER
Это обычный путь разрегистрации саморегистрирующегося сервера автоматизации OLE.
Миграция
Delphi 2
Совместимость D1/D2
Какая может быть причина того, что программа, работающая в среде W31, не работает в W95 ?
Похоже на то, что данные, сохраненные в двоичном файле, читаются неправильно.
Имеется масса отличий в фундаментальных типах между Delphi 1.0 и Delphi 2.0, которые могут повлиять на двоичный файл. Вот некоторые из них:
1. строки в Delphi 1.0 не эквивалентны строкам по умолчанию (длинным) в версии 2.0
2. «integer» 16-битный в Delphi 1.0 и 32-битный в 2.0
3. записи автоматически упаковываются в Delphi 1.0, но не в Delphi 2.0
– Rick Rogers
Delphi 3
Куда из Delphi 3 делся модуль для работы с ReportSmith? А мои любимые модули работы с OLE: ole2, oleauto и olectl?
Одной строкой
Nomadic отвечает:
Они лежат в X:DELPHI3LIBDELPHI2.
Ошибки
Delphi 1
Ошибка маски редактирования на быстрых пентиумах
Delphi 1
Данное поведение уже упоминалось ранее. Это, похоже, происходит только на быстрых машинах. Если у вас имеется исходный код RTL, вы можете сделать следующие изменения:
В MASK.PAS, замените
for I := Low(NewKeyState) to High(NewKeyState) do NewKeyState[I] := 0;
На
NewKeyState := KeyState;
– Steve Schafer
PASDBK16.DLL вызывает GPF
Delphi 1
Кто-нибудь может мне сказать, почему я получаю эту ошибку, да еще с рекомендацией завершить работу Delphi? При попытке запустить мое приложение в среде ID, я получаю сообщение «PASDBK16.DLL caused a GPF at 0002:21e6 Shutdown of delphi is recommended» (PASDBK16.DLL вызвало GPF по адресу 0002:21e6. Рекомендуется завершить работу Delphi). Если я завершаю работу Delphi, снова его запускаю и пытаюсь после этого выполнить приложение, то получаю ошибку «Application is already running terminate before compiling» (Работа приложения уже прервана перед компиляцией).
У меня возникла сегодня такая же проблема, и мой коллега нашел ее решение. Если каталог разработки вы делаете каталогом общего доступа, то при наличии разных проектов может случиться так, что настройки компилятора одного из проектов будут использованы при сборке другого, использующего тот же путь. Проблема в модулях общего доступа, которые компилируются по разным путям. Решение заключается в определении выходного (output) каталога для вашего приложения и полной пересборки проекта (не забудьте при этом создать соответствующий каталог). После этого проблема должна исчезнуть.
– Sjef van der Velde
Ошибка переполнения диска
Delphi 1
Попробуйте удалить из вашего проекта все, кроме dpr, pas и dfm-файлов, и перекомпилить его. Похоже, один из файлов вашего проекта был испорчен. У меня была аналогичная проблема, и я смог ее решить только таким способом.
Delphi 2
Ошибка чтения потока
Каждый раз при запуске Delphi 2.01 я получаю ошибку «Stream Read Error» (ошибка чтения потока). Как мне отделаться от этого?
Удалите DSK– и DSM– файлы из вашего проектного каталога.
– Ralph Friedman
Delphi 5
Ошибка в ProgressBar
В ProgressBar представлено свойство BorderWidth. На мой взгляд, ребята из Inprise допустили очередную ошибку. В этом свойстве отсутствует «защита от дурака». Если BorderWidth < Int(Heigth*0.3) – все нормально, вы управляете высотой "бегущего" индикатора. Если (BorderWidth > Int(Heigth*0.3)) and (BorderWidth < Int(Heigth*0.5)) – индикатор исчезает. Тогда зачем он нужен? При BorderWidth = Int(Heigth*0.5) – получите сообщение – "Error. Division by zero". При больших значениях BorderWidth – вместо индикатора "дыра".
К сожалению, исправить эту ошибку можно только в исходнике.
C уважением, VS.
DLL
Разное
Синхронизация DLL с открытым набором данных
Delphi 2
Тема: Синхронизация DLL с открытым набором данных
В данном совете показано как с помощью Object Pascal динамически, на лету, связать DLL с активной базой данных, таким образом дающей программисту возможность воспользоваться Modularize-характеристикой. (Независимо от текущего режима, будь то разработка приложения, или его выполнение)
Технология динамической линковки DLL к EXE полезна во многих случаях. Например, работа с пакетами для создания 'plug-in' модулей (A/R, A/P, General Ledger и др.) или Point of Sale package с Current Stock, FIFO/LIFO Ordering, Vendor Tracking, и пр. модули.
Данная статья дает работающий пример того, как это сделать с единственной dll, 'Editdll.dll', и предоставит разработчику материал, расказывающий о том, как организовать в вашем приложении подключаемые модули.
Предварительные условия:
Хорошее знание работы компонента TTable, умение использовать DLL, BDE API и знание BDE hCursor. *WIN API для динамической загрузки любых DLL.
Пример приложения
Приведенная ниже форма, EditForm, работает с таблицей COUNTRY, расположенной в каталоге DBDEMO. При нажатии пользователем кнопки 'Edit' или при двойном щелчке на записи (строке), возникает диалоговое окно, расположенное в 'EditDll.dll' и демонстрирующее специфическую информацию, относящуюся к данной записи. В этой "точке" DLL синхронизирует себя не только с набором данных (и сессией), но и с текущей записью. Это означает, что полозователь изменяет те же самые данные, что он видит в EditForm! Ну а теперь углубимся в код демонстрационного приложения. (Для удобства просто скопируйте отсюда эти файлы и вставьте в ваше приложение)
Проект главной формы
{ MAINDB.DPR }
program maindb;
uses Forms, mainform in 'mainform.pas' {dbmainform};
{$R *.RES}
begin
Application.Initialize;
Application.CreateForm(TDBMainForm, DBMainForm);
Application.Run;
end.
{ MAINFORM.PAS }
unit mainform;
interface
uses SysUtils, Windows, Messages, Classes, Graphics, Controls, StdCtrls, Forms, DBCtrls, DB, DBGrids, DBTables, Grids, ExtCtrls, BDE;
type TDBMainForm = class(TForm)
Table1Name: TStringField;
Table1Capital: TStringField;
Table1Continent: TStringField;
Table1Area: TFloatField;
Table1Population: TFloatField;
DBGrid1: TDBGrid;
DBNavigator: TDBNavigator;
Panel1: TPanel;
DataSource1: TDataSource;
Panel2: TPanel;
Table1: TTable;
EditButton: TButton;
procedure FormCreate(Sender: TObject);
procedure EditButtonClick(Sender: TObject);
procedure DBGrid1DblClick(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var DBMainForm: TDBMainForm;
implementation
{$R *.DFM}
procedure TDBMainForm.FormCreate(Sender: TObject);
begin
Table1.Open;
end;
// {ПРИМЕЧАНИЕ: DBHandle - дескриптор базы данных & DSHandle - курсор
// рассматриваемой записи. Кроме того, если вы имеете цель в
// динамической загрузке DLL во время выполнения приложения,
// используйте вызовы API LoadLibrary, GetProcAddress и
// FreeLibrary вместо подразумевающихся вызовов загрузки при
// запуске. Пример использования API для динамической загрузки: }
// Type
// {Для GetProcAddress}
- Основы объектно-ориентированного программирования - Бертран Мейер - Прочая околокомпьтерная литература
- HR-брендинг. Как стать лучшим работодателем в России - Нина Осовицкая - Маркетинг, PR, реклама
- Аквариум. (Новое издание, исправленное и переработанное) - Виктор Суворов (Резун) - Шпионский детектив
- Как учить чужой язык? - Антон Хрипко - Справочники
- Концептуальное проектирование сложных решений - Андрей Теслинов - Психология, личное