Accessing COM Objects

John via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Jun 15 01:21:06 PDT 2016


On Wednesday, 15 June 2016 at 06:56:59 UTC, Joerg Joergonson 
wrote:
> When I try to compile your code I get the following errors:
>
> main.d(953): Error: function 
> core.sys.windows.objbase.CoTaskMemAlloc (uint) is not callable 
> using argument types (immutable(ulong))
> main.d(970): Error: can only slice tuple types, not _error_
> main.d(974): Error: can only slice tuple types, not _error_
>
> coTaskMemAlloc is defined with ULONG in the objbase.d file... 
> so I have no idea what's going on there.
>
>         immutable bufferSize = (funcDesc.cParams + 1) * 
> (wchar*).sizeof;
>         auto names = cast(wchar**)CoTaskMemAlloc(bufferSize);

Looks like bufferSize just needs to be cast to uint. Didn't get 
that error in DMD.

>
> The other two I also don't know:
>
> params ~= new Parameter(method, (name[0 .. 
> SysStringLen(name)]).toUTF8(),
>
> If I run it in ldc I get the error
>
> Error: forward reference to inferred return type of function 
> call 'getParameters'		
>
>   private static getParameters(MethodImpl method) {
>     Parameter dummy;
>     return getParameters(method, dummy, false);
>   }
>
> It does compile in DMD though.

OK, adding the return type to the signature should fix that. So:

   private static Parameter getParameters(MethodImpl method)

>
> When running I get the error
>
>  Error loading type library/DLL.
>
> The IDL file is in the same directory

Did you try to pass it an IDL file? No wonder it didn't work - 
you pass in the type library instead, which is a binary file such 
as a DLL, EXE or TLB file. You can get the file's path from 
OleView by highlighting the library on the left (eg Photoshop) 
and on the right it will show a tree with the path beside "win32".


More information about the Digitalmars-d-learn mailing list