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.
Annonceindlæg fra SoftwareOne
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; } //-----------------------------------------------------------------------------------------