D - How to use IDispatch? (COM, ActiveX)
Hi. I have used D recently. It's so fan.
Well, I understood how to use COM in D from samples and the imported DirectX
Lib.
But I can't call the interfaces of a COM made with VB.
I meet the error "access violation".
The COM has DUAL Interface: IUnknown and IDispatch.
I think I have to use IDispatch with the COM.
But IUnknown was implemented in phobos only.
Tell me how to use the COM Please?
----sources I wrote.-----------
interface IClass1 : IUnknown {
extern(Windows):
HRESULT Calc(long x, long y, long* z); // z=x+y
} ;
int main() {
const GUID  CLSID_Class1 ={0xd1890a6d, 0xb213, 0x11d4,
[0xaf,0xc1,0x00,0xd0,0xb7,0xad,0x59,0xe8]}; /* CLSID */
const IID  IID_IClass1 = {0xd1890a6c, 0xb213, 0x11d4,
[0xaf,0xc1,0x00,0xd0,0xb7,0xad,0x59,0xe8]}; /* IID   */
BLAH BLAH
hr=CoInitialize(null);
hr=CoCreateInstance(&CLSID_Class1, null, CLSCTX_INPROC_SERVER,
&IID_IClass1,&pIClass1);
long x,y,z;
x=10; y=20; z=0;
pIClass1.Calc(a,b,&z); //at here, I meet the error. 
pIClass1.Release();
printf("x+y=%d\n", z);
BLAH BLAH
}
 Aug 01 2003
Test to verify that CoCreateInstance() succeeded. -Walter "shizu" <shizu_member pathlink.com> wrote in message news:bgev23$1hsk$1 digitaldaemon.com...Hi. I have used D recently. It's so fan. Well, I understood how to use COM in D from samples and the importedDirectXLib. But I can't call the interfaces of a COM made with VB. I meet the error "access violation". The COM has DUAL Interface: IUnknown and IDispatch. I think I have to use IDispatch with the COM. But IUnknown was implemented in phobos only. Tell me how to use the COM Please? ----sources I wrote.----------- interface IClass1 : IUnknown { extern(Windows): HRESULT Calc(long x, long y, long* z); // z=x+y } ; int main() { const GUID CLSID_Class1 ={0xd1890a6d, 0xb213, 0x11d4, [0xaf,0xc1,0x00,0xd0,0xb7,0xad,0x59,0xe8]}; /* CLSID */ const IID IID_IClass1 = {0xd1890a6c, 0xb213, 0x11d4, [0xaf,0xc1,0x00,0xd0,0xb7,0xad,0x59,0xe8]}; /* IID */ BLAH BLAH hr=CoInitialize(null); hr=CoCreateInstance(&CLSID_Class1, null, CLSCTX_INPROC_SERVER, &IID_IClass1,&pIClass1); long x,y,z; x=10; y=20; z=0; pIClass1.Calc(a,b,&z); //at here, I meet the error. pIClass1.Release(); printf("x+y=%d\n", z); BLAH BLAH }
 Aug 02 2003








 
  
  
  "Walter" <walter digitalmars.com>
 "Walter" <walter digitalmars.com>