Avatar billede palle1976 Nybegynder
12. januar 2005 - 14:00 Der er 5 kommentarer og
1 løsning

Problemer med include filer

Jeg er ved at lave noget kode hvor jeg skal oprette et OLE object med følgende kode:

Variant my_word;
my_word = Variant::CreateObject( "word.application" );

For at kunne bruge denne kode skal jeg includere følgende:
#include <utilcls.h>
#include <comobj.hpp>

Mit problem er at jeg får følgende fejl når jeg includerer de nævnte filer:
fatal error C1083: Cannot open include file: 'utilcls.h': No such file or directory

fatal error C1083: Cannot open include file: 'comobj.hpp': No such file or directory

Mit spørgsmål er hvordan jeg får includeret de to filer ??

Hvis jeg kan få et andet eksempel til at oprette et OLE/COM object, som virker, vil jeg også give points for det.
Avatar billede bertelbrander Novice
12. januar 2005 - 20:34 #1
Så vidt jeg kan se er de to header filer Borland C++ Builder header-filer, så der er nok ikke nogen større chance for at de vil virke med Visual C++, selv om du fandt dem.

Jeg ved ikke noget om OLE/COM.
Avatar billede palle1976 Nybegynder
13. januar 2005 - 08:46 #2
Er der forskel på hvilke filer der kan benyttes fra Borland C++ og Visual C++ ??

Det vil altså sige at man ikke kan lave det samme fra de to forskellige udviklingsmiljøer ??

Er det ikke muligt at importere nogle filer eller opdatere Visual C++, så det bliver muligt at lave det ønskede kode ??
Avatar billede joha Nybegynder
13. januar 2005 - 18:48 #3
Det kunne også være du har fejl i din path-angivelse. Det tyder ikke på at VC++ kan finde de to headere du includer... Prøv at gå ind i options I VC og inckluder det path for filerne...

Om Borland headerne er kompatible med VC++? Tja det ved jeg ikke, men man kan altid prøve...
Avatar billede bertelbrander Novice
13. januar 2005 - 19:39 #4
Jeg tvivler på at du kan bruge header filerne fra Borland Builder med VC++. Udover headerfilerne skal du nok bruge et lib, det virker sansynligvis heller ikke med VC++.
Det ser ud til at headerne er en del af Borland Builder's VCL, dette er meget Borland specifikt.

Headerfilerne findes ikke til min version af VisualC++.
Avatar billede codecow Nybegynder
15. januar 2005 - 03:17 #5
Hej.

Det kan nok gøres nemmere end med denne metode mer er også selv lige startet med COM.

Brug COM/OLE browsern til at finde det COM object du vil bruge

#import "Path\to\com.dll"

det skaber to filer *.tlh *.tli som er en slags header filer for COM'en
Der i finder du det namespace du skal bruge: using namespace blah;

Find GUID for det object og det interface du skal bruge i COM/OLE browseren
CLSIDFromString( L"{F9043C85-F6F2-101A-A3C9-08002B2F49FB}", &clsid );
CLSIDFromString( L"{083039C2-13F4-11D1-8B7E-0000F8754DA1}", &iid );

Brug CoInitialize() og CoCreateInstance() til at skabe com objectet og Release() og
CoUninitialize() til at rydde op med.

////////////////////////////////////////////////////////////////////////////////////

/*
COM have the elegance of a figure-skating hippopotamus.
But putting MFC on top of COM is like dressing the hippo in an oversized clown suit.
*/

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

#import "c:\windows\system32\comdlg32.ocx"

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 -> PutFilter( (BSTR) L"*.txt" );
    p_cdlg -> PutMaxFileSize( 256 );
    p_cdlg -> PutFileName( (BSTR) L"no_name" );
    p_cdlg -> ShowSave();
    BSTR bstr_file_name = p_cdlg -> GetFileName();

        /* Blah blah blah */

    // Cleanup
        p_cdlg -> Release();
    CoUninitialize();
    return 0;
}

//////////////////////////////////////////////////////////////////////////
/*
(\(..)/)
  @@
  )(
  (oo)
  ~\
*/
//////////////////////////////////////////////////////////////////////////

Håber det hjælper dig
Avatar billede palle1976 Nybegynder
21. januar 2005 - 09:32 #6
Tak for det gode eksempel, det var lige hvad jeg skulle bruge. Jeg rendte dog ind i en række andre problemer men jeg har fået det til at virke nu.
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