How to implementing com interface?

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • kscho

    How to implementing com interface?

    Hi~

    i wanna implement like COM interface, but I have problem pass this pointer.

    How can i pass this pointer in C ?

    How can i pass this pointer in CPP (thus not occured error)?

    //_______ test1.cpp _______________ _______________ _________

    #include <stdio.h>
    extern "C" void main_test();

    class ITest {
    public:
    virtual void ftn(int pParam) = 0;
    virtual void ftn222(int pParam) = 0;
    };



    class Test:public ITest{
    public:
    virtual void ftn(int pParam);
    virtual void ftn222(int pParam);
    int a;
    };

    // error occurs because this pointer passing
    void Test:: ftn(int pParam){
    a = 10; // this makes error, error occurs the time of access member
    valuable
    printf("ftn test\n");
    }


    void Test:: ftn222(int pParam){
    printf("ftn test222\n");
    }

    extern "C" ITest *createTest(voi d){
    return new Test();
    }

    extern "C" void deleteTest(void * pTest){
    delete (Test*)pTest;
    }

    int main(int argc, char* argv[]){
    main_test();
    return 0;

    }
    //_______test2.c _______________ _______________ _

    #include <stdio.h>

    typedef struct I_XX {
    void ( __stdcall *ftn ) (int );
    void ( __stdcall *ftn222 ) (int );
    } I_XX;


    typedef struct XX{
    const struct I_XX *lpVtbl;
    }XX;
    extern void *createTest(voi d);
    extern void deleteTest(void * pTest);
    void main_test()
    {
    XX* p = (XX*)createTest ();
    p->lpVtbl->ftn(10);
    p->lpVtbl->ftn222(20);
    deleteTest(p);
    }

    i'm referenced basetype.h

    /** basetype.h

    STDMETHOD_(ULON G,AddRef) (THIS) PURE;

    #if defined(__cplus plus) && !defined(CINTER FACE)

    define THIS void

    #else

    #define THIS INTERFACE FAR * This

    #endif

    **/

    thanks in advance,
    cho.


  • Rob Williscroft

    #2
    Re: How to implementing com interface?

    kscho wrote in news:bk66l1$9s2 $1@news1.kornet .net:
    [color=blue]
    > i wanna implement like COM interface, but I have problem pass this
    > pointer.
    >[/color]

    Your code has a compiler specific dependancies ( e.g. __stdcall and
    the way you assume stuff about the layout of vtables ). Standard C++
    doesn't even assume the existance of vtables, any mechanism which
    does the job is OK.

    You need to ask this in a compiler specific newsgroup or possibly
    a COM specific newsgroup.

    Look for a group's starting with comp.os.ms-windows.program mer.*
    and microsoft.publi c.* ( you may need to use microsoft's news server
    to post to these, so the comp... ones may be prefered).

    HTH

    Rob.
    --

    Comment

    Working...