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