Re[5]: Падения программы при закрытии
От: MaximE Великобритания  
Дата: 14.04.03 07:48
Оценка:
Здравствуйте, LEugene, Вы писали:

GS>>Показывай конструктор (включая FinslConstruct) IXX и код метода XXMethod.


LE>
LE>STDMETHODIMP CXX::XXMethod(BSTR *p_bstrX1, BSTR *p_bstrX2, long *pVal)
LE>{
LE>    AFX_MANAGE_STATE(AfxGetStaticModuleState())

LE>    CString szX1, szX2;
LE>    CYYDlg dlg;
LE>    if (dlg.GetX(szX1, szX2))
LE>    {
LE>        *p_bstrX1 = szX1.AllocSysString();
LE>        *p_bstrX2 = szX2.AllocSysString();

LE>        *pVal = 0;
LE>    }
LE>    else
    {
        *p_bstrX1 = 0;
        *p_bstrX2 = 0;
        *pVal = -1;
LE>    }

LE>    return S_OK;
LE>}
LE>


Но проблема, видимо, не здесь. Что ты делаешь дальше, после:

LE>IXXPtr pPtr(__uuidof(XX));
LE>BSTR bstrX1, bstrX2;
LE>pPtr->XXMethod(&bstrX1, &bstrX2);


?
Re: Падения программы при закрытии
От: gwg-605 Россия  
Дата: 14.04.03 09:46
Оценка:
Здравствуйте, LEugene, Вы писали:

LE>Есть СОМ-объект из которого вызывается другой СОМ-объект. Делается это примерно вот так:

LE>
LE>IXXPtr* pPtr;
LE>try
LE>{
LE>    pPtr = new IXXPtr(__uuidof(XX));
LE>}
LE>catch(_com_error& e)
LE>{
LE>    AfxMessageBox(*e.ErrorMessage());
LE>    return;
LE>}
LE>BSTR bstrX1[100], bstrX2[100];
LE>(*pPtr)->XXMethod(bstrX1, bstrX2);
LE>delete pPtr;
LE>

LE>Так вот, если этот кусок выполняется, то при завершении программы неск. раз выскакивает "Программа выполнила недопустимую операцию...". Не подскажете-ли, где тут собака порылась?
LE>PS: Использую MSVC6 SP5

У меня была похожая проблема: Деструктор смарт-поинтера вызывался после CoUninitialize().
int main() {
    CoInitialize(0) ;
    IXXXX obj ;
    try {
        obj.CreateInstance(__uuidof(XXXX)) ;
        ...
    } catch(_com_error& e) {
        printf( "error\n" ) ;
    }
    CoUninitialize() ;
}


Я это написал по памяти, в прямую может не работать. Ошибка вываливается при выходе из main. Решается строкой перед CoUninitialize(): obj = NULL ;

Удачи,
Может поможет.
Re[6]: Падения программы при закрытии
От: LEugene  
Дата: 14.04.03 10:17
Оценка:
ME>Но проблема, видимо, не здесь. Что ты делаешь дальше, после:

ME>
LE>IXXPtr pPtr(__uuidof(XX));
LE>BSTR bstrX1, bstrX2;
LE>pPtr->XXMethod(&bstrX1, &bstrX2);
ME>


После вывожу полученные значения в соотвесттвующие CEdit'ы. Делаю это обычным SetWindowText'ом. Тут не должно быть ошибки — слишком все просто...
Re[2]: Падения программы при закрытии
От: LEugene  
Дата: 14.04.03 10:27
Оценка:
Здравствуйте, gwg-605, Вы писали:

G6>Здравствуйте, LEugene, Вы писали:


LE>Есть СОМ-объект из которого вызывается другой СОМ-объект. Делается это примерно вот так:

LE>[ccode]
LE>IXXPtr* pPtr;
LE>try
LE>{
LE> pPtr = new IXXPtr(__uuidof(XX));
LE>}
LE>catch(_com_error& e)
LE>{
LE> AfxMessageBox(*e.ErrorMessage());
LE> return;
LE>}
LE>BSTR bstrX1[100], bstrX2[100];
LE>(*pPtr)->XXMethod(bstrX1, bstrX2);
LE>delete pPtr;

G6>У меня была похожая проблема: Деструктор смарт-поинтера вызывался после CoUninitialize().


Дык... В моем-то коде деструктор вызывается явно (delete pPtr и явно до того как сработает CoUninitialize()...
Re[7]: Падения программы при закрытии
От: George Seryakov Россия  
Дата: 14.04.03 13:11
Оценка:
Здравствуйте, LEugene, Вы писали:

ME>Но проблема, видимо, не здесь. Что ты делаешь дальше, после:


ME>
LE>IXXPtr pPtr(__uuidof(XX));
LE>BSTR bstrX1, bstrX2;
LE>pPtr->XXMethod(&bstrX1, &bstrX2);
ME>


LE>После вывожу полученные значения в соотвесттвующие CEdit'ы. Делаю это обычным SetWindowText'ом. Тут не должно быть ошибки — слишком все просто...


Вроде, все ОК. Тогда давай проверять, что в конце выскакивает наведенная ошибка. Начинай комментировать все, кроме вызова XXMethod и использования результатов и смотри — не исчезнет ли сбой.
GS
Re[8]: Падения программы при закрытии
От: LEugene  
Дата: 15.04.03 12:15
Оценка:
GS>Вроде, все ОК. Тогда давай проверять, что в конце выскакивает наведенная ошибка. Начинай комментировать все, кроме вызова XXMethod и использования результатов и смотри — не исчезнет ли сбой.

Спасибо за совет, благодаря ему удалось локализовать ошибку. Причиной обсуждавшейся проблемы была ошибка во внешней библиотеке (Stingray Objective Grid), либо в неправильном ее использовании — следствие продолжается...
Спасибо всем высказавшимся за посильную помощь.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.