Mercurial > projects > dwt-samples
annotate snippets/ole/Snippet81.d @ 159:ab5728d2a610
removed debug output
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Sat, 30 Aug 2008 13:57:54 +0200 |
parents | 8907b6374258 |
children |
rev | line source |
---|---|
151 | 1 /******************************************************************************* |
2 * Copyright (c) 2000, 2004 IBM Corporation and others. | |
3 * All rights reserved. This program and the accompanying materials | |
4 * are made available under the terms of the Eclipse Public License v1.0 | |
5 * which accompanies this distribution, and is available at | |
6 * http://www.eclipse.org/legal/epl-v10.html | |
7 * | |
8 * Contributors: | |
9 * IBM Corporation - initial API and implementation | |
10 * Port to the D programming language: | |
11 * Enzo Petrelli | |
12 *******************************************************************************/ | |
13 module ole.Snippet81; | |
14 | |
15 /* | |
16 * OLE and ActiveX example snippet: browse the typelibinfo for a program id (win32 only) | |
17 * NOTE: This snippet uses internal SWT packages that are | |
18 * subject to change without notice. | |
19 * | |
20 * For a list of all SWT example snippets see | |
21 * http://www.eclipse.org/swt/snippets/ | |
22 */ | |
23 | |
24 import dwt.DWT; | |
25 import dwt.widgets.Display; | |
26 import dwt.widgets.Shell; | |
27 | |
28 import dwt.dwthelper.utils; // String | |
29 import dwt.internal.ole.win32.OAIDL; | |
30 import dwt.ole.win32.OLE; | |
31 import dwt.ole.win32.OleAutomation; | |
32 import dwt.ole.win32.OleControlSite; | |
33 import dwt.ole.win32.OleFrame; | |
34 import dwt.ole.win32.OleFunctionDescription; | |
35 import dwt.ole.win32.OlePropertyDescription; | |
36 | |
153
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
37 import tango.io.Stdout; |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
38 import tango.io.Print; |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
39 import tango.text.convert.Format; |
151 | 40 |
153
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
41 int main() { |
151 | 42 int iRes = 0; |
43 | |
153
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
44 String progID = "Shell.Explorer"; |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
45 //String progID = "Excel.Application"; |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
46 |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
47 Display oDisplay = new Display(); |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
48 Shell oShell = new Shell(oDisplay); |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
49 |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
50 OleFrame frame = new OleFrame(oShell, DWT.NONE); |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
51 OleControlSite oOleSite = null; |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
52 OleAutomation oOleAutoObj = null; |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
53 try { |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
54 oOleSite = new OleControlSite(frame, DWT.NONE, progID); |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
55 } |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
56 catch (Exception oExc) { |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
57 Stdout.formatln("Exception {} creating OleControlSite on type library for {}", oExc.toString(), progID); |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
58 return 1; |
151 | 59 } |
153
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
60 try { |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
61 oOleAutoObj = new OleAutomation(oOleSite); |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
62 } |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
63 catch (Exception oExc) { |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
64 Stdout.formatln("Exception {} OleAutomation on type library for {}", oExc.toString(), progID); |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
65 return 1; |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
66 } |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
67 |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
68 Stdout.formatln("TypeLibrary for: '{}'", progID); |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
69 printTypeInfo(oOleAutoObj, Stdout); |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
70 |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
71 oShell.dispose(); |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
72 oDisplay.dispose(); |
151 | 73 return iRes; |
74 } | |
75 | |
153
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
76 private static void printTypeInfo(OleAutomation oOleAutoObj, Print!(char) oOut) |
151 | 77 { |
78 dwt.internal.ole.win32.OAIDL.TYPEATTR * pTypeAttr = oOleAutoObj.getTypeInfoAttributes(); | |
153
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
79 if (pTypeAttr !is null) { |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
80 if (pTypeAttr.cFuncs > 0) { |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
81 oOut.formatln("Functions :"); |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
82 for (int iIdx = 0; iIdx < pTypeAttr.cFuncs; ++iIdx) { |
151 | 83 OleFunctionDescription oData = oOleAutoObj.getFunctionDescription(iIdx); |
153
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
84 char[] sArgList = ""; |
151 | 85 int iFirstOptionalArgIndex = oData.args.length - oData.optionalArgCount; |
153
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
86 for (int iArg = 0; iArg < oData.args.length; ++iArg) { |
151 | 87 sArgList ~= "["; |
153
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
88 if (iArg >= iFirstOptionalArgIndex){ |
151 | 89 sArgList ~= "optional, "; |
153
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
90 } |
151 | 91 sArgList ~= getDirection(oData.args[iArg].flags) ~ "] " ~ |
92 getTypeName(oData.args[iArg].type) ~ " " ~ | |
93 oData.args[iArg].name | |
94 ; | |
153
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
95 if (iArg < oData.args.length - 1){ |
151 | 96 sArgList ~= ", "; |
153
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
97 } |
151 | 98 } |
153
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
99 oOut.formatln("{} (id = {} (0x{:X8}))", getInvokeKind(oData.invokeKind), oData.id, oData.id); |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
100 oOut.formatln("\tSignature : {} {}({})", getTypeName(oData.returnType), oData.name, sArgList); |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
101 oOut.formatln("\tDescription: {}", oData.documentation); |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
102 oOut.formatln("\tHelp File : {}", oData.helpFile); |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
103 oOut.formatln(""); |
151 | 104 } |
105 } | |
153
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
106 |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
107 if (pTypeAttr.cVars > 0) { |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
108 oOut.formatln("\n\nVariables :"); |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
109 for (int iIdx = 0; iIdx < pTypeAttr.cVars; ++iIdx) { |
151 | 110 OlePropertyDescription oData = oOleAutoObj.getPropertyDescription(iIdx); |
153
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
111 oOut.formatln("PROPERTY (id = {} (0x{:X8})", oData.id, oData.id); |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
112 oOut.formatln("\tName : {}", oData.name); |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
113 oOut.formatln("\tType : {}", getTypeName(oData.type)); |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
114 oOut.formatln(""); |
151 | 115 } |
116 } | |
117 } | |
118 } | |
153
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
119 private static char[] getTypeName(int iType) { |
151 | 120 int iBase = iType & ~OLE.VT_BYREF; |
153
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
121 char[] sDsc = null; |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
122 switch (iBase) { |
151 | 123 case OLE.VT_BOOL : sDsc = "boolean"; break; |
124 case OLE.VT_R4 : sDsc = "float"; break; | |
125 case OLE.VT_R8 : sDsc = "double"; break; | |
126 case OLE.VT_I4 : sDsc = "int"; break; | |
127 case OLE.VT_DISPATCH : sDsc = "IDispatch"; break; | |
128 case OLE.VT_UNKNOWN : sDsc = "IUnknown"; break; | |
129 case OLE.VT_I2 : sDsc = "short"; break; | |
130 case OLE.VT_BSTR : sDsc = "String"; break; | |
131 case OLE.VT_VARIANT : sDsc = "Variant"; break; | |
132 case OLE.VT_CY : sDsc = "Currency"; break; | |
133 case OLE.VT_DATE : sDsc = "Date"; break; | |
134 case OLE.VT_UI1 : sDsc = "unsigned char"; break; | |
135 case OLE.VT_UI4 : sDsc = "unsigned int"; break; | |
136 case OLE.VT_USERDEFINED : sDsc = "UserDefined"; break; | |
137 case OLE.VT_HRESULT : sDsc = "HRESULT"; break; | |
138 case OLE.VT_VOID : sDsc = "void"; break; | |
139 case OLE.VT_UI2 : sDsc = "unsigned short"; break; | |
140 case OLE.VT_UINT : sDsc = "unsigned int"; break; | |
141 case OLE.VT_PTR : sDsc = "void *"; break; | |
142 default: break; | |
143 } | |
153
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
144 if (sDsc !is null) { |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
145 if ((iType & OLE.VT_BYREF) == OLE.VT_BYREF){ |
151 | 146 return sDsc ~ " *"; |
153
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
147 } |
151 | 148 return sDsc; |
149 } | |
153
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
150 return Format("unknown {} (0x{:X4})", iType, iType); |
151 | 151 } |
153
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
152 |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
153 char[] getDirection(int bDirection) { |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
154 char[] sDirString = ""; |
151 | 155 bool bComma = false; |
153
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
156 if ((bDirection & OLE.IDLFLAG_FIN) != 0) { |
151 | 157 sDirString ~= "in"; |
158 bComma = true; | |
159 } | |
153
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
160 if ((bDirection & OLE.IDLFLAG_FOUT) != 0) { |
151 | 161 if (bComma) sDirString ~= ", "; |
162 sDirString ~= "out"; | |
163 bComma = true; | |
164 } | |
153
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
165 if ((bDirection & OLE.IDLFLAG_FLCID) != 0) { |
151 | 166 if (bComma) sDirString ~= ", "; |
167 sDirString ~= "lcid"; | |
168 bComma = true; | |
169 } | |
153
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
170 if ((bDirection & OLE.IDLFLAG_FRETVAL) != 0) { |
151 | 171 if (bComma) sDirString ~= ", "; |
172 sDirString ~= "retval"; | |
173 } | |
174 return sDirString; | |
175 } | |
153
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
176 private static char[] getInvokeKind(int iInvKind) { |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
177 switch (iInvKind) { |
151 | 178 case OLE.INVOKE_FUNC : return "METHOD"; |
179 case OLE.INVOKE_PROPERTYGET : return "PROPERTY GET"; | |
180 case OLE.INVOKE_PROPERTYPUT : return "PROPERTY PUT"; | |
181 case OLE.INVOKE_PROPERTYPUTREF : return "PROPERTY PUT BY REF"; | |
182 default: break; | |
183 } | |
153
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
184 return Format("unknown {}", iInvKind); |
151 | 185 } |
153
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
186 |
8907b6374258
Tangofied the OLE snippet 81
Frank Benoit <benoit@tionex.de>
parents:
151
diff
changeset
|
187 |