![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Для передачи объекта в функцию нужно после определить название класса OleVariant.
var OleObject : OleVariant; OleObject.ClassName - такого метода нету. Код:
uses
SysUtils, Variants, ActiveX, Windows;
function VariantObjectClassName(const V: OleVariant): string;
var
pd: PVarData;
ti: ITypeInfo;
disp: IDispatch;
sDoc, sHelpFile: WideString;
helpCtx: Integer;
begin
Result := '';
pd := PVarData(@V);
// Delphi-объект, упакованный как varObject
if (pd^.VType = varObject) and (pd^.VPointer <> nil) then
begin
Result := TObject(pd^.VPointer).ClassName;
Exit;
end;
// COM/Automation объект (IDispatch или IUnknown)
if (pd^.VType = varDispatch) or (pd^.VType = varUnknown) then
begin
// Попробуем получить IDispatch
try
disp := IDispatch(V);
except
disp := nil;
end;
if Assigned(disp) then
begin
// Получаем typeinfo (локаль можно заменить на LOCALE_USER_DEFAULT)
if Succeeded(disp.GetTypeInfo(0, GetUserDefaultLCID, ti)) and Assigned(ti) then
begin
// MEMBERID_NIL (-1) — имя типа
ti.GetDocumentation(MEMBERID_NIL, Result, sDoc, helpCtx, sHelpFile);
end
else
Result := 'IDispatch без typeinfo';
end;
end;
end;Это посоветовал ИИ. Но не работает Последний раз редактировалось Admin, 12.06.2026 в 12:33. |