MG>Статья:
MG>Ускоренная обработка данных типа Variant в DelphiАвтор(ы): Maksim Gumerov
Дата: 18.03.2005
На примере ускорения обработки данных типа Variant в Delphi автор рассматривает более широкую проблему ускорения динамической диспетчеризации вызовов в статически типизированных языках.
MG>Аннотация:
MG>На примере ускорения обработки данных типа Variant в Delphi автор рассматривает более широкую проблему ускорения динамической диспетчеризации вызовов в статически типизированных языках.
В чем смысл усложнения простого решения проблемы ?
Если автор статьи предполагает некую информированность о постоянстве типов обрабатываемых Variant'ов, то какой смысл подменять вызовы операций для обработки ? Не проще ли перенести данные в локальные переменные (возможно, сгруппированные в цельный логически обоснованный объект) и пользоваться ими, а потом вернуть их обратно в варианты ? Опять же предлагаемый метод иллюстрации подмены операции сложения удачен был бы для языка с возможностью перегрузки операций (C++), в статье же выглядит крайне неуклюже. Проще было бы ввести наподобие :
TVarBoost....
IntPtr: Pointer;
function GetAsInt:Integer;
procedure SetAsInt(v:Integer);
public
property IntVal:Integer read GetAsInt write SetAsInt;
...
end;
function TForm1.GetAsInt():Integer;
begin
Result:=Integer(IntPtr^);
end;
procedure TForm1.SetAsInt(p:Integer);
begin
Integer(IntPtr^):=p;
end;
Да и вообще новизны в статье, увы, немного. Графоманство какое-то
Здравствуйте, Maksim Gumerov, Вы писали:
MG>Статья:
MG>Ускоренная обработка данных типа Variant в DelphiАвтор(ы): Maksim Gumerov
Дата: 18.03.2005
На примере ускорения обработки данных типа Variant в Delphi автор рассматривает более широкую проблему ускорения динамической диспетчеризации вызовов в статически типизированных языках.
MG>Авторы:
MG> Maksim Gumerov
MG>Аннотация:
MG>На примере ускорения обработки данных типа Variant в Delphi автор рассматривает более широкую проблему ускорения динамической диспетчеризации вызовов в статически типизированных языках.
Максим, статья мне понравилась.
Вы в ней упомянули об одной интересной проблеме: передача параметров через IDispatch*
Вы можете мне помочь:
Как сформировать параметр Params для передачи
в void Funct(IDispatch* Params) для С++ ????
причём в этом параметре содержится массив....????
Типа делаем массив, реализуем для него IDispatch??
Может кто сталкивался с такой задачей?
для Java это выглядит так:
var arr=new Array();
arr[0] = 1;
arr[1] = 4;
arr[2] = 5;
Funct(arr);
email: mikhailov@progmaster.ru
Прошу прощения за задержку с ответом. Вы бы лучше задали этот вопрос на форуме, к примеру, COM. Мне пока не приходилось сталкиваться с передачей массивов как IDispath. В статье-то я обмолвился о другом: об использовании Variant в Delphi для хранения указателя на IDispatch, с упрощенным (по сравнению с "голой" работой с IDispatch::Invoke) синтаксисом вызова методов через этот IDispatch.
Slicer