var sIName : string;
sIName := 'L_MOL::GETMOL';
RunInterface(sIName);
при компилировании sIName воспринимается как имя интерфеса.
И при выполнении говорит, что не находит интерфейс с именем sIName.
Хотелось бы, чтобы при исполнении кода запускался интерфейс L_MOL::GETMOL, а не пыталось запустить интерфес с именем sIName.
Круто. Спасибо!
Тут еще ядерщики-атлантисты высказали мнение, что для этой задачи нужно объектный интерфейс использовать и несколько его реализаций...
Но это слегка сложнее будет написать, чем предложенный Вами вариант!
ну для объектных можно типа этого делать
LoadImplementationList('F_userreport::IDir_ExpImp', 'Dir_ExpImp_');
var k: integer;
var wstr:string ;
vdict.w_ImplementationCount:=GetImplementationCount
for (k := 0; k < vdict.w_ImplementationCount; Inc(k))
{ if k+1+#COL_TABLR_IN=I
{ wstr := GetImplementationName(k);
_Try
{ //message(wstr)
if not NullVipRef(PDir_ExpIMP)
FreeVipInterface(PDir_ExpIMP);
LoadVipRef(PDir_ExpIMP, wstr);
Dict_GetDocSpis:=PDir_ExpIMP.GetTableName+';'+PDir_ExpIMP.GetTableTitle ;
}
_except
on ExObjIfcNoImpl: {}
Эта штука нужна только если от используемой реализации требуется какое-то стандартное поведение, описываемое протоколом, т.е., объектным интерфейсом. Например, нужно, чтобы все означенные реализации должны предоставлять метод для расчета (чего-то) или печати.
Для запуска произвольного интерфейса достаточно и RunAnyView.