How to implementing com interface?

K

kscho

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(void){
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(void);
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_(ULONG,AddRef) (THIS) PURE;

#if defined(__cplusplus) && !defined(CINTERFACE)

define THIS void

#else

#define THIS INTERFACE FAR * This

#endif

**/

thanks in advance,
cho.
 
R

Rob Williscroft

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

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.programmer.*
and microsoft.public.* ( you may need to use microsoft's news server
to post to these, so the comp... ones may be prefered).

HTH

Rob.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top