Avatar billede vaco Nybegynder
24. august 2004 - 10:19 Der er 1 løsning

Problemer med custom control i COM server

Hej...

Jeg er løbet ind i et sjovt lille problem, med min COM server håber der er nogen der kan hjælpe...

Jeg har skrevet en COM server, med MFC support, der bla. bruger en custom control fra en anden dll. Jeg har registret controllen i InitInstance() og oprettet m_pMainWnd der benytter controllen.

Når projektet compileres og linkes registres COM severen også, og InitInstance() kaldes og m_pMainWnd vises med controllen.

Jeg har så oprettet en test klient (i C#) der benytter min COM server, men når klienten opretter en instans af COM serveren findes controllen ikke i m_pMainWnd? Hvad kan dette skyldes?

Sker der noget under registreringen af COM serveren, der gør det muligt at bruge controllen? Hvis der gør, hvad er dette?

Her er koden der registrerer og bruger controllen:

BOOL CMyComServer::InitInstance()
{
    AFX_MANAGE_STATE(AfxGetStaticModuleState());

    InitCommonControls();

    LoadLibrary("control.dll");

    char szClassname[] = _T("CCustomControl");
    WNDCLASS wc;
    if (!GetClassInfo(AfxGetInstanceHandle(), szClassname, &wc))
    {
      GetClassInfo(NULL, _T("static"), &wc);
      wc.hInstance = AfxGetInstanceHandle();
      wc.style = CS_HREDRAW | CS_VREDRAW;
      wc.lpszClassName = szClassname;
      wc.lpfnWndProc = ::DefWindowProc;
 
      if (!AfxRegisterClass(&wc))
          AfxMessageBox("Failed to register CCustomControl class");
    }

    CCustomControl::Initialize();

    CMainDlg *pDlg = new CMainDlg();
    pDlg->Create(NULL, "My dialog");
    m_pMainWnd = pDlg;

    return CWinApp::InitInstance();
}


I CMainDlg:

int CStatusDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (!m_customContrl.Create(this,IDC_CUSTOMCONTROL))
    {
        return -1;
    }

    m_customContrl.ShowWindow(SW_SHOW);
    ShowWindow(SW_SHOW);
   
    return 0;
}
Avatar billede vaco Nybegynder
24. august 2004 - 13:13 #1
Hmmmm. fandt problemet....

Glemte lige en simpel ting.

Når COM serveren registres fra visual studio bliver den kørt som om den havde root directory i samme directory som kode filerne ligger. Mens når klienten kaldte COM serveren, var dens egentlige lokation i debug folderen...

Kopierede dll'en med custom control til den rigtige mappe og voila!!!!!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester