Avatar billede hassle Nybegynder
12. maj 2005 - 11:49 Der er 1 kommentar og
1 løsning

.tlb og GUID hva så?

Jeg skal lave et interface med et 3. parts program.
Jeg har et lille VB eksempel, en tlb fil og et GUID fra regedit.

Er GUID nok til at lave connection point?
Er det nok at laven #import "mintlb.tlb" for at få adgang til de metoder der er?
skal jeg have en #using namespace "mit namespace"?

Hvis det er, vil jeg gerne have en stump kode, gerne mfc.
med en forklaring.
Avatar billede codecow Nybegynder
15. maj 2005 - 15:31 #1
Jeg går ud fra at du vil benytte en COM, selv om det ikke helt giver sig fra dit spørgsmål

tlb filen er en fil som beskriver interfacet til COM modult

GUID'erne er det navn som Windows bruger internt til at indetificere COM modulerne


Her er vist hvordan man bruger COM "rent"

//-----------------------------------------------------------------------------------------
#include <windows.h>
#include <shlwapi.h> // PathFindFileName
#include <stdio.h> // sprintf
#include <tchar.h> // L macro

#import "c:\windows\system32\comdlg32.ocx" // tlb fil her.

using namespace MSComDlg;

int APIENTRY WinMain (
    HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow )
{
    HRESULT hres;
    CLSID clsid;
    IID iid;
    ICommonDialog* p_cdlg;

    hres = CoInitialize( NULL    );
    if( hres != S_OK ) {
        MessageBox( 0, "CoInitialize failed", "ERROR", MB_OK | MB_ICONSTOP );
        return 0;
    }
   
    //CLSIDFromProgID( L"MSComDlg.CommonDialog.1", &clsid );
    CLSIDFromString( L"{F9043C85-F6F2-101A-A3C9-08002B2F49FB}", &clsid );
    CLSIDFromString( L"{083039C2-13F4-11D1-8B7E-0000F8754DA1}", &iid );

    hres = CoCreateInstance(
        clsid,
        NULL,
        CLSCTX_ALL, 
        iid,
        (void**)&p_cdlg);

    if( hres != S_OK ) {
        MessageBox( 0, "CoCreateInstance failed", "ERROR", MB_OK | MB_ICONSTOP );
        return 0;
    }
   
    p_cdlg -> ShowColor();

    // Cleanup
    CoUninitialize();
    return 0;
}
//-----------------------------------------------------------------------------------------

Her er det vist med smart pointere. Det er lidt mindre bøvlet

//-----------------------------------------------------------------------------------------
#include <windows.h>
#include <shlwapi.h> // PathFindFileName
#include <stdio.h> // sprintf
#include <tchar.h> // L macro

#import "c:\windows\system32\comdlg32.ocx" // tlb fil her

using namespace MSComDlg;

int APIENTRY WinMain (
    HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow )
{
    HRESULT hres;

    hres = CoInitialize( NULL    );
    if( hres != S_OK ) {
        MessageBox( 0, "CoInitialize failed", "ERROR", MB_OK | MB_ICONSTOP );
        return 0;
    }

    ICommonDialogPtr p;
    p.CreateInstance( "MSComDlg.CommonDialog" ); // find friendly name i registrerings databasen under HKEY_CLASSES_ROOT
    p->ShowColor();
    p.Detach();

    // Cleanup
    CoUninitialize();
    return 0;
}
//-----------------------------------------------------------------------------------------
Avatar billede hassle Nybegynder
01. juni 2005 - 11:34 #2
Lukker
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