Использование MFC ActiveX в консольном прилодении
От: bearsnn Украина  
Дата: 07.07.04 11:19
Оценка:
Hi all

Есть mfc ActiveXнаписаный на VC 7.0. Надо его использовать в консольном приложении. Деля CoCreateInstance получаю объект, все хорошо но только пытаюсь вызвать любой метод ActiveX выдает exception. Проверил активыкс создается но не одного метода не вызывается. Може я где прогнал кто подскажет, что не так



     HRESULT hr;    
     CComQIPtr<_DSPort> m_pSPort;

    // Init the COM library 
    if ( FAILED( CoInitialize(NULL) ))
    {
        printf("Fatal Error: OLE initialization failed");
        return 1;
    }

    // Create a COM object comport coclas.
    hr = CoCreateInstance ( 
                        CLSID_SPort,
                        NULL,
                        CLSCTX_INPROC_SERVER, 
                        IID_IDSPort,
                        (void**) &m_pSPort);

    if ( SUCCEEDED(hr) )
    {
        printf("CoCreateInstance() succed\n");
        m_pSPort->CreatePort("COM1");
    }
    else
    {
        printf("CoCreateInstance() failed.\n\n");
    }

    if ( FAILED(hr) )
        return 0;
    
    
    CoUninitialize();
    return 0;
Re: Использование MFC ActiveX в консольном прилодении
От: rus blood Россия  
Дата: 07.07.04 12:07
Оценка:
Здравствуйте, bearsnn, Вы писали:

B>Hi all


1. Это ActiveX-контрол, или это просто COM-объект?
2. Как связаны _DSPort и IDSPort ?
3. Что принимает на вход метод CreatePort ?
Имею скафандр — готов путешествовать!
Re[2]: Использование MFC ActiveX в консольном прилодении
От: bearsnn Украина  
Дата: 07.07.04 12:39
Оценка:
Здравствуйте, rus blood, Вы писали:

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


B>>Hi all


RB>1. Это ActiveX-контрол, или это просто COM-объект?


ActiveX-контрол

RB>2. Как связаны _DSPort и IDSPort ?

_DSPort — генерится вытоматически дерективой #import
IDSPort — uuid интерфейс
RB>3. Что принимает на вход метод CreatePort ?
Не имеет значение, даже если вызывать методы без параметров, все равно выдает exception
Re[3]: Использование MFC ActiveX в консольном прилодении
От: rus blood Россия  
Дата: 07.07.04 12:52
Оценка:
Здравствуйте, bearsnn, Вы писали:

B>Здравствуйте, rus blood, Вы писали:


Ок, а если так

HRESULT hr = CoInitialize(NULL);
if (FAILED(hr))
    return -1;
IDSPortPtr p;
hr = p.CreateInstance(CLSID_SPort);
if (SUCCEEDED(hr))
    p->CreatePort(L"COM1");


?
Имею скафандр — готов путешествовать!
Re[4]: Использование MFC ActiveX в консольном прилодении
От: bearsnn Украина  
Дата: 07.07.04 13:32
Оценка:
Здравствуйте, rus blood, Вы писали:


Если не сложно можешь привести пример с конкретным активыксом, а то что не то. IDSPortPtr не имеет метода CreateInstance. Може я где то гоню

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


B>>Здравствуйте, rus blood, Вы писали:


RB>Ок, а если так


RB>
RB>HRESULT hr = CoInitialize(NULL);
RB>if (FAILED(hr))
RB>    return -1;
RB>IDSPortPtr p;
RB>hr = p.CreateInstance(CLSID_SPort);
RB>if (SUCCEEDED(hr))
    p->>CreatePort(L"COM1");
RB>


RB>?
Re[5]: Использование MFC ActiveX в консольном прилодении
От: rus blood Россия  
Дата: 07.07.04 13:52
Оценка:
Здравствуйте, bearsnn, Вы писали:

B>Если не сложно можешь привести пример с конкретным активыксом


Ну уж не знаю, как тебе весь пример привести.
У меня был дежурный контрольчик (создан тут для других топиков).
Вот пример из консоли.

#include "stdafx.h"
#include <windows.h>

#import "TestX.tlb" no_namespace, named_guids

int main(int argc, char* argv[])
{
    HRESULT hr = CoInitialize(NULL);

    ITestWndPtr p;
    hr = p.CreateInstance(L"TestX.TestWnd");
    
    hr = p->Func();

    CoUninitialize();
    return 0;
}

Отлично работает, метод вызывается.


B> а то что не то. IDSPortPtr не имеет метода CreateInstance.


Если сам раппер у тебя создался, то и метод должЁн быть.
Заметь, это метод раппера, а не объекта (грубо говоря, вызывается через "точку", а не через "стрелку").
Имею скафандр — готов путешествовать!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.