View mode: basic / threaded / horizontal-split · Log in · Help
January 15, 2003
COM questions?
Hi, well I didn't got an answer to my first try :-(, so I try again:

I want to use some COM objects with D. Where do I get the interface
definition from? IUnknown is defined in com.d

interface IUnknown
{
   HRESULT QueryInterface(IID* riid, void** pvObject);
   ULONG AddRef();
   ULONG Release();
}

But for other COM objects? Do I have to build all those interfaces up
myself? Can I use typelibs?

--
Robert M. Münch
IT & Management Freelancer
Mobile: +49 (0)177 2452 802
Fax   : +49 (0)721 8408 9112
Web   : http://www.robertmuench.de
January 16, 2003
Re: COM questions?
At the moment, you'll have to declare them yourself. Nobody has done the
work to make the .d imports for them.

"Robert M. Münch" <robert.muench@robertmuench.de> wrote in message
news:b04fdh$8pl$1@digitaldaemon.com...
> Hi, well I didn't got an answer to my first try :-(, so I try again:
>
> I want to use some COM objects with D. Where do I get the interface
> definition from? IUnknown is defined in com.d
>
> interface IUnknown
> {
>     HRESULT QueryInterface(IID* riid, void** pvObject);
>     ULONG AddRef();
>     ULONG Release();
> }
>
> But for other COM objects? Do I have to build all those interfaces up
> myself? Can I use typelibs?
January 20, 2003
Re: COM questions?
"Walter" <walter@digitalmars.com> schrieb im Newsbeitrag
news:b071n7$1pb5$1@digitaldaemon.com...

> At the moment, you'll have to declare them yourself. Nobody has done the
> work to make the .d imports for them.

Hi, ok. I try to see if a tool can be done that takes a typelib and creates
source-code. Robert
January 21, 2003
Re: COM questions?
"Walter" <walter@digitalmars.com> schrieb im Newsbeitrag
news:b071n7$1pb5$1@digitaldaemon.com...

> At the moment, you'll have to declare them yourself. Nobody has done the
> work to make the .d imports for them.

Hi, one more question: Do I have to declare the complete interface or is it
possible to only add a few functions to start with? Do I have to considere a
specific order of entries in the interface declaration? IIRC these calls are
translated into a VTBL lookup so IMO this might be the case. Robert
January 21, 2003
Re: COM questions?
"Robert M. Münch" <robert.muench@robertmuench.de> wrote in message
news:b0j3cn$2dh9$1@digitaldaemon.com...
> "Walter" <walter@digitalmars.com> schrieb im Newsbeitrag
> news:b071n7$1pb5$1@digitaldaemon.com...
>
> > At the moment, you'll have to declare them yourself. Nobody has done the
> > work to make the .d imports for them.
>
> Hi, one more question: Do I have to declare the complete interface or is
it
> possible to only add a few functions to start with? Do I have to considere
a
> specific order of entries in the interface declaration? IIRC these calls
are
> translated into a VTBL lookup so IMO this might be the case. Robert
>

no you must only define the new methods as in

interface IDirectDrawPalette : IUnknown
{
/*** IUnknown methods ***/
// HRESULT QueryInterface( REFIID riid, LPVOID * ppvObj);
// ULONG   AddRef();
// ULONG   Release();
/*** IDirectDrawPalette methods ***/
HRESULT GetCaps( LPDWORD );
HRESULT GetEntries( DWORD,DWORD,DWORD,LPPALETTEENTRY );
HRESULT Initialize( LPDIRECTDRAW, DWORD, LPPALETTEENTRY );
HRESULT SetEntries( DWORD,DWORD,DWORD,LPPALETTEENTRY );
}

if not the vtbl ends up off by (in this case 3)

Mike.
January 27, 2003
Re: COM questions?
"Mike Wynn" <mike.wynn@l8night.co.uk> schrieb im Newsbeitrag
news:b0j4pl$2e73$1@digitaldaemon.com...

> no you must only define the new methods as in
>
> interface IDirectDrawPalette : IUnknown
> {
>  /*** IUnknown methods ***/
> // HRESULT QueryInterface( REFIID riid, LPVOID * ppvObj);
> // ULONG   AddRef();
> // ULONG   Release();
>  /*** IDirectDrawPalette methods ***/
>  HRESULT GetCaps( LPDWORD );
>  HRESULT GetEntries( DWORD,DWORD,DWORD,LPPALETTEENTRY );
>  HRESULT Initialize( LPDIRECTDRAW, DWORD, LPPALETTEENTRY );
>  HRESULT SetEntries( DWORD,DWORD,DWORD,LPPALETTEENTRY );
> }

Hi, ok but I need to use the same order as MS did otherwise lookups in the
VTBL will be screwed up.

So I tried to get the above interface running but encountered further
problems:

1. I need the CLSID and the IID. I extracted these values from the MS header
files.

2. The LPDIRECTDRAW symbol isn't defined for D yet. The LPPALETTEENTRY is
defined in win32.d, which isn't compatible with windows.d ... :-((

Walter, would it be possible that we move to win32.d ? IMO there are much
more symbols in it. It's really annoying to have two "header" files that are
incompatible. Robert
January 27, 2003
Re: COM questions?
I have a bunch of DirectX header stuff ported for D. (ok, so it was like DMD
version 0.39 or something)

Drop me a direct email if you want them.

I wonder if it's possible to have #import for DLL's or typelib's, for D?
Then we can use the DirectX for C# or Visual Basic, and probably a lot of
other M$ libraries too.

Sean

"Robert M. Münch" <robert.muench@robertmuench.de> wrote in message
news:b13ftp$22pu$1@digitaldaemon.com...
> "Mike Wynn" <mike.wynn@l8night.co.uk> schrieb im Newsbeitrag
> news:b0j4pl$2e73$1@digitaldaemon.com...
>
> > no you must only define the new methods as in
> >
> > interface IDirectDrawPalette : IUnknown
> > {
> >  /*** IUnknown methods ***/
> > // HRESULT QueryInterface( REFIID riid, LPVOID * ppvObj);
> > // ULONG   AddRef();
> > // ULONG   Release();
> >  /*** IDirectDrawPalette methods ***/
> >  HRESULT GetCaps( LPDWORD );
> >  HRESULT GetEntries( DWORD,DWORD,DWORD,LPPALETTEENTRY );
> >  HRESULT Initialize( LPDIRECTDRAW, DWORD, LPPALETTEENTRY );
> >  HRESULT SetEntries( DWORD,DWORD,DWORD,LPPALETTEENTRY );
> > }
>
> Hi, ok but I need to use the same order as MS did otherwise lookups in the
> VTBL will be screwed up.
>
> So I tried to get the above interface running but encountered further
> problems:
>
> 1. I need the CLSID and the IID. I extracted these values from the MS
header
> files.
>
> 2. The LPDIRECTDRAW symbol isn't defined for D yet. The LPPALETTEENTRY is
> defined in win32.d, which isn't compatible with windows.d ... :-((
>
> Walter, would it be possible that we move to win32.d ? IMO there are much
> more symbols in it. It's really annoying to have two "header" files that
are
> incompatible. Robert
January 28, 2003
Re: COM questions?
"Sean L. Palmer" <seanpalmer@directvinternet.com> schrieb im Newsbeitrag
news:b13sv6$2akp$1@digitaldaemon.com...

> I wonder if it's possible to have #import for DLL's or typelib's, for D?
> Then we can use the DirectX for C# or Visual Basic, and probably a lot of
> other M$ libraries too.

Hi, IMO this would really be cool! Using D for COM development could be the
killer application for D. The MS environment setup is just to big for a
quick development. What I'm dreaming about is using D and some available COM
files and that's it.

My current goal is to use MS Word as a COM object in a D project. It looks
like this is a real challange... Robert
January 29, 2003
Re: COM questions?
how complete are you DirectX headers, there realy should be a combined
effort somewhere,  I have done the basic DirectX interface (explicit loading
of ddraw.dll, get the entry point etc)

I second the call for importing from dll;
one of the great delphi features (still IMHO does not outweight the horrid
syntax and dynamic array behaviour (which D has as well)) is the ability to
decare functions to import from dlls
in delphi the following
function getAHandle( a, b : LongInt ) : THandle; cdecl; extern mylib.dll;
will import a function from mylib.dll
which was compiled with the following C prototype
__declspec(dllexport) HANDLE getAHandle( long a, long b );

it would be nice to have
extern (C, mylib.dll) { HANDLE getAHamde( long a, long b ); }

and later when someone worked out how to connect a GC to a dll or app and
allow classes in dlls (like C++ can)
extern (D, mylib.dll) { MyObj getADHamde( long a, long b ); }
but more on that when I've worked out what is actually required.


"Sean L. Palmer" <seanpalmer@directvinternet.com> wrote in message
news:b13sv6$2akp$1@digitaldaemon.com...
> I have a bunch of DirectX header stuff ported for D. (ok, so it was like
DMD
> version 0.39 or something)
>
> Drop me a direct email if you want them.
>
> I wonder if it's possible to have #import for DLL's or typelib's, for D?
> Then we can use the DirectX for C# or Visual Basic, and probably a lot of
> other M$ libraries too.
>
> Sean
>
> "Robert M. Münch" <robert.muench@robertmuench.de> wrote in message
> news:b13ftp$22pu$1@digitaldaemon.com...
> > "Mike Wynn" <mike.wynn@l8night.co.uk> schrieb im Newsbeitrag
> > news:b0j4pl$2e73$1@digitaldaemon.com...
> >
> > > no you must only define the new methods as in
> > >
> > > interface IDirectDrawPalette : IUnknown
> > > {
> > >  /*** IUnknown methods ***/
> > > // HRESULT QueryInterface( REFIID riid, LPVOID * ppvObj);
> > > // ULONG   AddRef();
> > > // ULONG   Release();
> > >  /*** IDirectDrawPalette methods ***/
> > >  HRESULT GetCaps( LPDWORD );
> > >  HRESULT GetEntries( DWORD,DWORD,DWORD,LPPALETTEENTRY );
> > >  HRESULT Initialize( LPDIRECTDRAW, DWORD, LPPALETTEENTRY );
> > >  HRESULT SetEntries( DWORD,DWORD,DWORD,LPPALETTEENTRY );
> > > }
> >
> > Hi, ok but I need to use the same order as MS did otherwise lookups in
the
> > VTBL will be screwed up.
> >
> > So I tried to get the above interface running but encountered further
> > problems:
> >
> > 1. I need the CLSID and the IID. I extracted these values from the MS
> header
> > files.
> >
> > 2. The LPDIRECTDRAW symbol isn't defined for D yet. The LPPALETTEENTRY
is
> > defined in win32.d, which isn't compatible with windows.d ... :-((
> >
> > Walter, would it be possible that we move to win32.d ? IMO there are
much
> > more symbols in it. It's really annoying to have two "header" files that
> are
> > incompatible. Robert
>
>
January 29, 2003
Re: COM questions?
On Wed, 29 Jan 2003 01:43:31 -0000, Mike Wynn <mike.wynn@l8night.co.uk> 
wrote:

> how complete are you DirectX headers, there realy should be a combined
> effort somewhere,  I have done the basic DirectX interface (explicit 
> loading of ddraw.dll, get the entry point etc)

Hi, yes that's a good idea. Further I'm not only interested in DirectX but 
in other COM stuff too. For example using all the MS Office stuff via COM 
makes a lot of sense too.

So a central D-COM ;-)) library would really be nice. What side is best 
suited to keep such an information?

-- 
Robert M. Münch
Top | Discussion index | About this forum | D home