slan046
10-11-2011, 14:07
Добрый день. Помогите разобраться как правильно написать COM-объект.
Создаю проект, добавляю в него Automation Object, к созданному интерфейсу цепляю например Method1 c 1-м параметром OUT и со вторым параметром OUT, RETVAL:
Variant a, b;
STDMETHODIMP TtestOLEImpl::Method1(VARIANT* Param1, VARIANT* Param2)
{
a = "Текст";
*Param1 = a;
b = "Другой текст";
*Param2 = b;
return S_OK;
}
Компилю, регистрирую в системе. Затем пишу клиента:
Variant Obj;
Obj = CreateOleObject("Project1.testOLE");
Variant a, b;
AnsiString _a, _b;
a = Obj.OleFunction("Method1", b);
_a = a.strVal;
_b = b.strVal;
в _a получаю "Текст", а при попытке получить _b получаю вылет из проги.
Под отладчиком смотрю на переменные a и b: в переменной a всё нормально, в переменной b все поля в 0 (отсюда и вылет).
Дайте совет, как вернуть из ком-объекта строковые параметры в методе
Создаю проект, добавляю в него Automation Object, к созданному интерфейсу цепляю например Method1 c 1-м параметром OUT и со вторым параметром OUT, RETVAL:
Variant a, b;
STDMETHODIMP TtestOLEImpl::Method1(VARIANT* Param1, VARIANT* Param2)
{
a = "Текст";
*Param1 = a;
b = "Другой текст";
*Param2 = b;
return S_OK;
}
Компилю, регистрирую в системе. Затем пишу клиента:
Variant Obj;
Obj = CreateOleObject("Project1.testOLE");
Variant a, b;
AnsiString _a, _b;
a = Obj.OleFunction("Method1", b);
_a = a.strVal;
_b = b.strVal;
в _a получаю "Текст", а при попытке получить _b получаю вылет из проги.
Под отладчиком смотрю на переменные a и b: в переменной a всё нормально, в переменной b все поля в 0 (отсюда и вылет).
Дайте совет, как вернуть из ком-объекта строковые параметры в методе