Accessing COM Objects
Joerg Joergonson via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Wed Jun 15 11:32:28 PDT 2016
On Wednesday, 15 June 2016 at 17:20:31 UTC, John wrote:
> On Wednesday, 15 June 2016 at 16:45:39 UTC, Joerg Joergonson
> wrote:
>> Thanks. When I ran it I got a d file! when I tried to use that
>> d file I get undefined IID and IDispatch. I imagine these
>> interfaces come from somewhere, probably built in?
>>
>> Any ideas?
>
> Add the following after the module name:
>
> import core.sys.windows.com, core.sys.windows.oaidl;
Thanks. Should these not be added to the generated file?
Also, could you add to it the following:
const static GUID iid =
Guid!("5DE90358-4D0B-4FA1-BA3E-C91BBA863F32");
inside the interface (Replace the string with the correct guid)?
This allows it to work with ComPtr which looks for the iid inside
the interface, shouldn't hurt anything.
In any case, I haven't got ComPtr to work so...
GUID Guid(string str)()
{
static assert(str.length==36, "Guid string must be 36 chars
long");
enum GUIDstring = "GUID(0x" ~ str[0..8] ~ ", 0x" ~ str[9..13]
~ ", 0x" ~ str[14..18] ~
", [0x" ~ str[19..21] ~ ", 0x" ~ str[21..23] ~ ", 0x" ~
str[24..26] ~ ", 0x" ~ str[26..28]
~ ", 0x" ~ str[28..30] ~ ", 0x" ~ str[30..32] ~ ", 0x" ~
str[32..34] ~ ", 0x" ~ str[34..36] ~ "])";
return mixin(GUIDstring);
}
....
also tried CoCreateInstance and getting error 80040154
Not sure if it works.
....
Changed the GUID to another one found in the registry(not the one
at the top of the generated file) and it works. Both load
photoshop
int main(string[] argv)
{
//auto ps = ComPtr!_Application(CLSID_PS).require;
//const auto CLSID_PS =
Guid!("6DECC242-87EF-11cf-86B4-444553540000"); // PS 90.1 fails
because of interface issue
const auto CLSID_PS =
Guid!("c09f153e-dff7-4eff-a570-af82c1a5a2a8"); // PS 90.0 works.
auto hr = CoInitialize(null);
auto iid = IID__Application;
_Application* pUnk;
hr = CoCreateInstance(&CLSID_PS, null, CLSCTX_ALL, &iid,
cast(void**)&pUnk);
if (FAILED(hr))
throw new Exception("ASDF");
}
The photoshop.d file
http://www.filedropper.com/photoshop_1
So, I guess it works but how to access the methods? The photoshop
file looks to have them listed but they are all commented out.
I suppose this is what ComPtr and other methods are used to help
create the interface but none seem to work.
More information about the Digitalmars-d-learn
mailing list