Mercurial > hg > vboxdotnet
comparison InteropCodeGen/gendotnet.cs @ 2:f1deea9c97a0
Cleaned up the interop code generator, added wrapper application to initialize kernel driver and run mono
author | Ivo Smits |
---|---|
date | Wed, 04 May 2011 16:10:08 +0200 |
parents | e1ec7bf71313 |
children | 64226294e26b |
comparison
equal
deleted
inserted
replaced
1:55ca098c88d0 | 2:f1deea9c97a0 |
---|---|
13 Param, | 13 Param, |
14 } | 14 } |
15 class TypeInfo { | 15 class TypeInfo { |
16 public String Name { get; private set; } | 16 public String Name { get; private set; } |
17 public String[] Attributes { get; private set; } | 17 public String[] Attributes { get; private set; } |
18 //public Boolean InputOnly { get; private set; } | |
19 public String Members { get; set; } | |
20 | 18 |
21 public TypeInfo(String name, params String[] attributes) { | 19 public TypeInfo(String name, params String[] attributes) { |
22 this.Name = name; | 20 this.Name = name; |
23 this.Attributes = attributes; | 21 this.Attributes = attributes; |
24 } | 22 } |
25 /*public TypeInfo(String name, bool inputOnly, params String[] attributes) | |
26 : this(name, attributes) { | |
27 this.InputOnly = inputOnly; | |
28 }*/ | |
29 /*public static TypeInfo CreateInterfaceWithMembers(String name, String members) { | |
30 TypeInfo ret = new TypeInfo(name, "MarshalAs(UnmanagedType.Interface)"); | |
31 ret.Members = members; | |
32 return ret; | |
33 }*/ | |
34 //Todo: if attribute mod="string"/"ptr" ... | |
35 public void WriteDeclaration(TextWriter o, ParameterType vartype) { | 23 public void WriteDeclaration(TextWriter o, ParameterType vartype) { |
36 WriteAttributes(o, vartype); | 24 WriteAttributes(o, vartype); |
37 o.Write(Name); | 25 o.Write(Name); |
38 } | 26 } |
39 public void WriteAttributes(TextWriter o, ParameterType vartype) { | 27 public void WriteAttributes(TextWriter o, ParameterType vartype) { |
40 //if (InputOnly && vartype != ParameterType.In) { | |
41 foreach (String attribute in Attributes) { | 28 foreach (String attribute in Attributes) { |
42 o.Write("["); | 29 o.Write("["); |
43 if (vartype == ParameterType.Return) o.Write("return: "); | 30 if (vartype == ParameterType.Return) o.Write("return: "); |
44 else if (vartype == ParameterType.Param) o.Write("param: "); | 31 else if (vartype == ParameterType.Param) o.Write("param: "); |
45 o.Write(attribute); | 32 o.Write(attribute); |
48 if (vartype == ParameterType.Out) o.Write("out "); | 35 if (vartype == ParameterType.Out) o.Write("out "); |
49 else if (vartype == ParameterType.Reference) o.Write("ref "); | 36 else if (vartype == ParameterType.Reference) o.Write("ref "); |
50 } | 37 } |
51 } | 38 } |
52 static Dictionary<String, TypeInfo> Types = new Dictionary<string, TypeInfo>(); | 39 static Dictionary<String, TypeInfo> Types = new Dictionary<string, TypeInfo>(); |
40 static void AddInterfaceTypes(params String[] names) { | |
41 foreach (String name in names) Types.Add(name, new TypeInfo(name, "MarshalAs(UnmanagedType.Interface)")); | |
42 } | |
43 static void AddEnumTypes(params String[] names) { | |
44 foreach (String name in names) Types.Add(name, new TypeInfo(name)); | |
45 } | |
53 static void InitTypes() { | 46 static void InitTypes() { |
54 Types.Add("short", new TypeInfo("Int16")); | 47 Types.Add("short", new TypeInfo("Int16")); |
55 Types.Add("unsigned short", new TypeInfo("UInt16")); | 48 Types.Add("unsigned short", new TypeInfo("UInt16")); |
56 Types.Add("unsigned long", new TypeInfo("UInt32")); | 49 Types.Add("unsigned long", new TypeInfo("UInt32")); |
57 Types.Add("long long", new TypeInfo("Int64")); | 50 Types.Add("long long", new TypeInfo("Int64")); |
61 //Types.Add("boolean", new TypeInfo("Boolean", "MarshalAs(UnmanagedType.Bool)")); | 54 //Types.Add("boolean", new TypeInfo("Boolean", "MarshalAs(UnmanagedType.Bool)")); |
62 Types.Add("boolean", new TypeInfo("Int32")); | 55 Types.Add("boolean", new TypeInfo("Int32")); |
63 Types.Add("wstring", new TypeInfo("String", "MarshalAs(UnmanagedType.LPWStr)")); | 56 Types.Add("wstring", new TypeInfo("String", "MarshalAs(UnmanagedType.LPWStr)")); |
64 //Types.Add("uuid", new TypeInfo("Guid", true, "MarshalAs(UnmanagedType.LPStruct)")); | 57 //Types.Add("uuid", new TypeInfo("Guid", true, "MarshalAs(UnmanagedType.LPStruct)")); |
65 Types.Add("uuid", new TypeInfo("Guid", "MarshalAs(UnmanagedType.LPStruct)")); | 58 Types.Add("uuid", new TypeInfo("Guid", "MarshalAs(UnmanagedType.LPStruct)")); |
66 | |
67 Types.Add("IMachine", new TypeInfo("IMachine", "MarshalAs(UnmanagedType.Interface)")); | |
68 Types.Add("ISession", new TypeInfo("ISession", "MarshalAs(UnmanagedType.Interface)")); | |
69 Types.Add("IVirtualBox", new TypeInfo("IVirtualBox", "MarshalAs(UnmanagedType.Interface)")); | |
70 Types.Add("IHost", new TypeInfo("IHost", "MarshalAs(UnmanagedType.Interface)")); | |
71 Types.Add("IConsole", new TypeInfo("IConsole", "MarshalAs(UnmanagedType.Interface)")); | |
72 Types.Add("ISystemProperties", new TypeInfo("ISystemProperties", "MarshalAs(UnmanagedType.Interface)")); | |
73 Types.Add("IProgress", new TypeInfo("IProgress", "MarshalAs(UnmanagedType.Interface)")); | |
74 Types.Add("IDisplay", new TypeInfo("IDisplay", "MarshalAs(UnmanagedType.Interface)")); | |
75 Types.Add("IMouse", new TypeInfo("IMouse", "MarshalAs(UnmanagedType.Interface)")); | |
76 Types.Add("IKeyboard", new TypeInfo("IKeyboard", "MarshalAs(UnmanagedType.Interface)")); | |
77 Types.Add("IFramebuffer", new TypeInfo("IFramebuffer", "MarshalAs(UnmanagedType.Interface)")); | |
78 Types.Add("IFramebufferOverlay", new TypeInfo("IFramebufferOverlay", "MarshalAs(UnmanagedType.Interface)")); | |
79 Types.Add("IMachineDebugger", new TypeInfo("IMachineDebugger", "MarshalAs(UnmanagedType.Interface)")); | |
80 Types.Add("IVirtualBoxErrorInfo", new TypeInfo("IVirtualBoxErrorInfo", "MarshalAs(UnmanagedType.Interface)")); | |
81 Types.Add("IEventSource", new TypeInfo("IEventSource", "MarshalAs(UnmanagedType.Interface)")); | |
82 Types.Add("IEventListener", new TypeInfo("IEventListener", "MarshalAs(UnmanagedType.Interface)")); | |
83 Types.Add("IEventContext", new TypeInfo("IEventContext", "MarshalAs(UnmanagedType.Interface)")); | |
84 Types.Add("IConsoleCallback", new TypeInfo("IConsoleCallback", "MarshalAs(UnmanagedType.Interface)")); | |
85 Types.Add("IEvent", new TypeInfo("IEvent", "MarshalAs(UnmanagedType.Interface)")); | |
86 | |
87 Types.Add("LockType", new TypeInfo("LockType")); | |
88 Types.Add("MediumVariant", new TypeInfo("MediumVariant")); | |
89 Types.Add("AccessMode", new TypeInfo("AccessMode")); | |
90 Types.Add("NATProtocol", new TypeInfo("NATProtocol")); | |
91 Types.Add("FirmwareType", new TypeInfo("FirmwareType")); | |
92 Types.Add("StorageControllerType", new TypeInfo("StorageControllerType")); | |
93 Types.Add("StorageBus", new TypeInfo("StorageBus")); | |
94 Types.Add("SessionType", new TypeInfo("SessionType")); | |
95 Types.Add("SessionState", new TypeInfo("SessionState")); | |
96 Types.Add("USBDeviceState", new TypeInfo("USBDeviceState")); | |
97 Types.Add("USBDeviceFilterAction", new TypeInfo("USBDeviceFilterAction")); | |
98 Types.Add("AudioControllerType", new TypeInfo("AudioControllerType")); | |
99 Types.Add("AudioDriverType", new TypeInfo("AudioDriverType")); | |
100 Types.Add("VRDPAuthType", new TypeInfo("VRDPAuthType")); | |
101 Types.Add("MachineState", new TypeInfo("MachineState")); | |
102 Types.Add("NetworkAdapterType", new TypeInfo("NetworkAdapterType")); | |
103 Types.Add("NetworkAttachmentType", new TypeInfo("NetworkAttachmentType")); | |
104 Types.Add("PortMode", new TypeInfo("PortMode")); | |
105 Types.Add("DeviceType", new TypeInfo("DeviceType")); | |
106 Types.Add("MediumState", new TypeInfo("MediumState")); | |
107 Types.Add("MediumType", new TypeInfo("MediumType")); | |
108 Types.Add("HostNetworkInterfaceType", new TypeInfo("HostNetworkInterfaceType")); | |
109 Types.Add("DeviceActivity", new TypeInfo("DeviceActivity")); | |
110 Types.Add("HostNetworkInterfaceMediumType", new TypeInfo("HostNetworkInterfaceMediumType")); | |
111 Types.Add("HostNetworkInterfaceStatus", new TypeInfo("HostNetworkInterfaceStatus")); | |
112 Types.Add("ProcessorFeature", new TypeInfo("ProcessorFeature")); | |
113 Types.Add("VFSType", new TypeInfo("VFSType")); | |
114 Types.Add("BIOSBootMenuMode", new TypeInfo("BIOSBootMenuMode")); | |
115 Types.Add("VirtualSystemDescriptionType", new TypeInfo("VirtualSystemDescriptionType")); | |
116 Types.Add("VirtualSystemDescriptionValueType", new TypeInfo("VirtualSystemDescriptionValueType")); | |
117 Types.Add("KeyboardHidType", new TypeInfo("KeyboardHidType")); | |
118 Types.Add("ClipboardMode", new TypeInfo("ClipboardMode")); | |
119 Types.Add("PointingHidType", new TypeInfo("PointingHidType")); | |
120 Types.Add("CPUPropertyType", new TypeInfo("CPUPropertyType")); | |
121 Types.Add("HWVirtExPropertyType", new TypeInfo("HWVirtExPropertyType")); | |
122 Types.Add("Scope", new TypeInfo("Scope")); | |
123 Types.Add("ChipsetType", new TypeInfo("ChipsetType")); | |
124 Types.Add("FaultToleranceState", new TypeInfo("FaultToleranceState")); | |
125 Types.Add("BandwidthGroupType", new TypeInfo("BandwidthGroupType")); | |
126 Types.Add("VBoxEventType", new TypeInfo("VBoxEventType")); | |
127 Types.Add("GuestMonitorChangedEventType", new TypeInfo("GuestMonitorChangedEventType")); | |
128 Types.Add("AuthType", new TypeInfo("AuthType")); | |
129 Types.Add("NetworkAdapterPromiscModePolicy", new TypeInfo("NetworkAdapterPromiscModePolicy")); | |
130 Types.Add("ExecuteProcessStatus", new TypeInfo("ExecuteProcessStatus")); | |
131 Types.Add("AdditionsRunLevelType", new TypeInfo("AdditionsRunLevelType")); | |
132 Types.Add("AdditionsFacilityStatus", new TypeInfo("AdditionsFacilityStatus")); | |
133 Types.Add("AdditionsFacilityType", new TypeInfo("AdditionsFacilityType")); | |
134 Types.Add("AdditionsFacilityClass", new TypeInfo("AdditionsFacilityClass")); | |
135 Types.Add("CleanupMode", new TypeInfo("CleanupMode")); | |
136 Types.Add("DataType", new TypeInfo("DataType")); | |
137 | |
138 Types.Add("IBandwidthControl", new TypeInfo("IntPtr")); | |
139 Types.Add("IVRDEServerInfo", new TypeInfo("IntPtr")); | |
140 Types.Add("IAdditionsFacility", new TypeInfo("IntPtr")); | |
141 Types.Add("IExtPackPlugIn", new TypeInfo("IntPtr")); | |
142 Types.Add("IExtPackFile", new TypeInfo("IntPtr")); | |
143 Types.Add("IExtPack", new TypeInfo("IntPtr")); | |
144 Types.Add("IBIOSSettings", new TypeInfo("IntPtr")); | |
145 Types.Add("IVFSExplorer", new TypeInfo("IntPtr")); | |
146 Types.Add("IUSBController", new TypeInfo("IntPtr")); | |
147 Types.Add("IStorageController", new TypeInfo("IntPtr")); | |
148 Types.Add("IVRDPServer", new TypeInfo("IntPtr")); | |
149 Types.Add("ISnapshot", new TypeInfo("IntPtr")); | |
150 Types.Add("INATEngine", new TypeInfo("IntPtr")); | |
151 Types.Add("IUSBDeviceFilter", new TypeInfo("IntPtr")); | |
152 Types.Add("IMediumAttachment", new TypeInfo("IntPtr")); | |
153 Types.Add("IUSBDevice", new TypeInfo("IntPtr")); | |
154 Types.Add("IParallelPort", new TypeInfo("IntPtr")); | |
155 Types.Add("ISerialPort", new TypeInfo("IntPtr")); | |
156 Types.Add("INetworkAdapter", new TypeInfo("IntPtr")); | |
157 Types.Add("IMedium", new TypeInfo("IntPtr")); | |
158 Types.Add("IGuestOSType", new TypeInfo("IntPtr")); | |
159 Types.Add("ISharedFolder", new TypeInfo("IntPtr")); | |
160 Types.Add("IPerformanceCollector", new TypeInfo("IntPtr")); | |
161 Types.Add("IDHCPServer", new TypeInfo("IntPtr")); | |
162 Types.Add("IAppliance", new TypeInfo("IntPtr")); | |
163 Types.Add("IVirtualBoxCallback", new TypeInfo("IntPtr")); | |
164 Types.Add("IPerformanceMetric", new TypeInfo("IntPtr")); | |
165 Types.Add("IMediumFormat", new TypeInfo("IntPtr")); | |
166 Types.Add("IHostUSBDevice", new TypeInfo("IntPtr")); | |
167 Types.Add("IHostNetworkInterface", new TypeInfo("IntPtr")); | |
168 Types.Add("IHostUSBDeviceFilter", new TypeInfo("IntPtr")); | |
169 Types.Add("IRemoteDisplayInfo", new TypeInfo("IntPtr")); | |
170 Types.Add("IGuest", new TypeInfo("IntPtr")); | |
171 Types.Add("IVirtualSystemDescription", new TypeInfo("IntPtr")); | |
172 Types.Add("IAudioAdapter", new TypeInfo("IntPtr")); | |
173 Types.Add("IExtPackManager", new TypeInfo("IntPtr")); | |
174 Types.Add("IVRDEServer", new TypeInfo("IntPtr")); | |
175 Types.Add("IPciDeviceAttachment", new TypeInfo("IntPtr")); | |
176 Types.Add("IBandwidthGroup", new TypeInfo("IntPtr")); | |
177 | |
178 Types.Add("$unknown", new TypeInfo("IntPtr")); | 59 Types.Add("$unknown", new TypeInfo("IntPtr")); |
60 | |
61 AddInterfaceTypes("IMachine", "ISession", "IVirtualBox", "IHost", "IConsole", "ISystemProperties"); | |
62 AddInterfaceTypes("IProgress", "IDisplay", "IMouse", "IKeyboard", "IFramebuffer", "IFramebufferOverlay"); | |
63 AddInterfaceTypes("IMachineDebugger", "IVirtualBoxErrorInfo", "IEventSource", "IEventListener", "IEventContext"); | |
64 AddInterfaceTypes("IConsoleCallback", "IEvent", "IBandwidthControl", "IVRDEServerInfo", "IAdditionsFacility"); | |
65 AddInterfaceTypes("IExtPackPlugIn", "IExtPackFile", "IExtPack", "IBIOSSettings", "IVFSExplorer", "IUSBController"); | |
66 AddInterfaceTypes("IStorageController", "IVRDPServer", "ISnapshot", "INATEngine", "IUSBDeviceFilter"); | |
67 AddInterfaceTypes("IMediumAttachment", "IUSBDevice", "IParallelPort", "ISerialPort", "INetworkAdapter"); | |
68 AddInterfaceTypes("IMedium", "IGuestOSType", "ISharedFolder", "IPerformanceCollector", "IDHCPServer"); | |
69 AddInterfaceTypes("IAppliance", "IVirtualBoxCallback", "IPerformanceMetric", "IMediumFormat", "IHostUSBDevice"); | |
70 AddInterfaceTypes("IHostNetworkInterface", "IHostUSBDeviceFilter", "IRemoteDisplayInfo", "IGuest"); | |
71 AddInterfaceTypes("IVirtualSystemDescription", "IAudioAdapter", "IExtPackManager", "IVRDEServer"); | |
72 AddInterfaceTypes("IPciDeviceAttachment", "IBandwidthGroup"); | |
73 | |
74 AddEnumTypes("LockType", "MediumVariant", "AccessMode", "NATProtocol", "FirmwareType", "StorageControllerType"); | |
75 AddEnumTypes("StorageBus", "SessionType", "SessionState", "USBDeviceState", "USBDeviceFilterAction"); | |
76 AddEnumTypes("AudioControllerType", "AudioDriverType", "VRDPAuthType", "MachineState", "NetworkAdapterType"); | |
77 AddEnumTypes("NetworkAttachmentType", "PortMode", "DeviceType", "MediumState", "VFSType", "MediumType"); | |
78 AddEnumTypes("HostNetworkInterfaceType", "DeviceActivity", "HostNetworkInterfaceMediumType", "HostNetworkInterfaceStatus"); | |
79 AddEnumTypes("ProcessorFeature", "BIOSBootMenuMode", "VirtualSystemDescriptionType", "VirtualSystemDescriptionValueType"); | |
80 AddEnumTypes("KeyboardHidType", "ClipboardMode", "PointingHidType", "CPUPropertyType", "HWVirtExPropertyType"); | |
81 AddEnumTypes("ChipsetType", "FaultToleranceState", "BandwidthGroupType", "ExecuteProcessStatus", "VBoxEventType"); | |
82 AddEnumTypes("GuestMonitorChangedEventType", "AuthType", "NetworkAdapterPromiscModePolicy", "AdditionsRunLevelType"); | |
83 AddEnumTypes("AdditionsFacilityStatus", "AdditionsFacilityType", "AdditionsFacilityClass", "CleanupMode", "DataType"); | |
179 } | 84 } |
180 static void Main(string[] args) { | 85 static void Main(string[] args) { |
181 InitTypes(); | 86 InitTypes(); |
182 | 87 |
183 XPathDocument doc = new XPathDocument("VirtualBox.xidl"); | 88 XPathDocument doc = new XPathDocument("VirtualBox.xidl"); |
241 switch (member.Name) { | 146 switch (member.Name) { |
242 case "desc": | 147 case "desc": |
243 break; | 148 break; |
244 case "attribute": { | 149 case "attribute": { |
245 String mName = member.SelectSingleNode("@name").Value; | 150 String mName = member.SelectSingleNode("@name").Value; |
246 //String mType = member.SelectSingleNode("@type").Value; | |
247 item = member.SelectSingleNode("@readonly"); | 151 item = member.SelectSingleNode("@readonly"); |
248 Boolean mReadOnly = item == null ? false : item.Value == "yes"; | 152 Boolean mReadOnly = item == null ? false : item.Value == "yes"; |
249 //item = member.SelectSingleNode("@mod"); | |
250 //String mMod = item == null ? null : item.Value; | |
251 mName = mName.Substring(0, 1).ToUpper() + mName.Substring(1); | 153 mName = mName.Substring(0, 1).ToUpper() + mName.Substring(1); |
252 oattribute.Write("\t"); | 154 oattribute.Write("\t"); |
253 /*TypeInfo t; | |
254 if (mMod == "ptr") { | |
255 t = new TypeInfo("IntPtr"); | |
256 } else if (mMod == "string") { | |
257 t = new TypeInfo("String", "MarshalAs(UnmanagedType.LPWStr)"); | |
258 } else if (mMod == null) { | |
259 if (!Types.TryGetValue(mType, out t)) { | |
260 Console.Error.WriteLine("Type {0} is not supported", mType); | |
261 t = new TypeInfo("void"); | |
262 } | |
263 } else { | |
264 Console.Error.WriteLine("Type modifier {0} is not supported", mMod); | |
265 t = new TypeInfo("void"); | |
266 }*/ | |
267 TypeInfo t = GetTypeDeclaration(member); | 155 TypeInfo t = GetTypeDeclaration(member); |
268 oattribute.Write(t.Name); | 156 oattribute.Write(t.Name); |
269 oattribute.Write(" "); | 157 oattribute.Write(" "); |
270 oattribute.Write(mName); | 158 oattribute.Write(mName); |
271 oattribute.WriteLine(" {"); | 159 oattribute.WriteLine(" {"); |
288 if (mParamReturn == null || mParamReturn.Count != 1) { | 176 if (mParamReturn == null || mParamReturn.Count != 1) { |
289 omethod.Write("void"); | 177 omethod.Write("void"); |
290 } else { | 178 } else { |
291 mParamReturn.MoveNext(); | 179 mParamReturn.MoveNext(); |
292 mReturn = true; | 180 mReturn = true; |
293 TypeInfo t = GetTypeDeclaration(mParamReturn.Current); | 181 WriteTypeDeclaration(omethod, mParamReturn.Current, ParameterType.Return); |
294 /*String mType = mParamReturn.Current.SelectSingleNode("@type").Value; | |
295 TypeInfo t; | |
296 if (!Types.TryGetValue(mType, out t)) { | |
297 Console.Error.WriteLine("Type {0} is not supported", mType); | |
298 t = new TypeInfo("void"); | |
299 mReturn = false; | |
300 }*/ | |
301 t.WriteDeclaration(omethod, ParameterType.Return); | |
302 } | 182 } |
303 mName = mName.Substring(0, 1).ToUpper() + mName.Substring(1); | 183 mName = mName.Substring(0, 1).ToUpper() + mName.Substring(1); |
304 omethod.Write(" "); | 184 omethod.Write(" "); |
305 omethod.Write(mName); | 185 omethod.Write(mName); |
306 omethod.Write("("); | 186 omethod.Write("("); |
308 bool first = true; | 188 bool first = true; |
309 if (mParams.MoveNext()) { | 189 if (mParams.MoveNext()) { |
310 while (true) { | 190 while (true) { |
311 XPathNavigator mParam = mParams.Current; | 191 XPathNavigator mParam = mParams.Current; |
312 String pDir = mParam.SelectSingleNode("@dir").Value; | 192 String pDir = mParam.SelectSingleNode("@dir").Value; |
313 //item = mParam.SelectSingleNode("@safearray"); | |
314 //Boolean pArray = item == null ? false : item.Value == "yes"; | |
315 //item = mParam.SelectSingleNode("@mod"); | |
316 //String pMod = item == null ? null : item.Value; | |
317 if (pDir == "return" && mReturn) { | 193 if (pDir == "return" && mReturn) { |
318 if (mParams.MoveNext()) { | 194 if (mParams.MoveNext()) { |
319 continue; | 195 continue; |
320 } else { | 196 } else { |
321 break; | 197 break; |
328 if (first) { | 204 if (first) { |
329 first = false; | 205 first = false; |
330 } else { | 206 } else { |
331 omethod.Write(", "); | 207 omethod.Write(", "); |
332 } | 208 } |
333 ParameterType pt = ParameterType.In; | 209 WriteTypeDeclaration(omethod, mParam, pDir == "out" ? ParameterType.Out : ParameterType.In); |
334 if (pDir == "out") pt = ParameterType.Out; | |
335 TypeInfo t = GetTypeDeclaration(mParam, ref pt); | |
336 t.WriteDeclaration(omethod, pt); | |
337 /*if (pArray) { | |
338 omethod.Write("[MarshalAs(UnmanagedType.SafeArray)] "); | |
339 if (pDir == "out") omethod.Write("out "); | |
340 else omethod.Write("ref "); | |
341 omethod.Write("System.Array"); | |
342 } else { | |
343 String pType = mParam.SelectSingleNode("@type").Value; | |
344 TypeInfo t; | |
345 if (!Types.TryGetValue(pType, out t)) { | |
346 Console.Error.WriteLine("Type {0} is not supported", pType); | |
347 t = new TypeInfo("IntPtr"); | |
348 mReturn = false; | |
349 } | |
350 if (pMod == "ptr") { | |
351 t.WriteDeclaration(omethod, ParameterType.Reference); | |
352 } else if (pDir == "out") { | |
353 t.WriteDeclaration(omethod, ParameterType.Out); | |
354 } else { | |
355 t.WriteDeclaration(omethod, ParameterType.In); | |
356 } | |
357 }*/ | |
358 omethod.Write(" p"); | 210 omethod.Write(" p"); |
359 omethod.Write(mParam.SelectSingleNode("@name").Value); | 211 omethod.Write(mParam.SelectSingleNode("@name").Value); |
360 if (!mParams.MoveNext()) break; | 212 if (!mParams.MoveNext()) break; |
361 } | 213 } |
362 } | 214 } |
371 } | 223 } |
372 private static TypeInfo GetTypeDeclaration(XPathNavigator nav) { | 224 private static TypeInfo GetTypeDeclaration(XPathNavigator nav) { |
373 ParameterType pt = ParameterType.Param; | 225 ParameterType pt = ParameterType.Param; |
374 return GetTypeDeclaration(nav, ref pt); | 226 return GetTypeDeclaration(nav, ref pt); |
375 } | 227 } |
228 private static void WriteTypeDeclaration(TextWriter o, XPathNavigator nav, ParameterType paramType) { | |
229 TypeInfo t = GetTypeDeclaration(nav, ref paramType); | |
230 t.WriteDeclaration(o, paramType); | |
231 } | |
376 private static TypeInfo GetTypeDeclaration(XPathNavigator nav, ref ParameterType paramType) { | 232 private static TypeInfo GetTypeDeclaration(XPathNavigator nav, ref ParameterType paramType) { |
377 String mType = nav.SelectSingleNode("@type").Value; | 233 String mType = nav.SelectSingleNode("@type").Value; |
378 XPathItem item; | 234 XPathItem item; |
379 item = nav.SelectSingleNode("@mod"); | 235 item = nav.SelectSingleNode("@mod"); |
380 String mMod = item == null ? null : item.Value; | 236 String mMod = item == null ? null : item.Value; |