1 // System.Runtime.InteropServices.Marshal.cs
3 // Sean MacIsaac (macisaac@ximian.com)
4 // Paolo Molaro (lupus@ximian.com)
5 // Dietmar Maurer (dietmar@ximian.com)
7 // (C) 2001-2002 Ximian, Inc.
10 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
12 // Permission is hereby granted, free of charge, to any person obtaining
13 // a copy of this software and associated documentation files (the
14 // "Software"), to deal in the Software without restriction, including
15 // without limitation the rights to use, copy, modify, merge, publish,
16 // distribute, sublicense, and/or sell copies of the Software, and to
17 // permit persons to whom the Software is furnished to do so, subject to
18 // the following conditions:
20 // The above copyright notice and this permission notice shall be
21 // included in all copies or substantial portions of the Software.
23 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
27 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
28 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
29 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
32 using System.Runtime.CompilerServices;
34 using System.Security;
35 using System.Reflection;
36 using System.Threading;
38 namespace System.Runtime.InteropServices
40 [SuppressUnmanagedCodeSecurity ()]
41 public sealed class Marshal
44 public static readonly int SystemMaxDBCSCharSize = 2; // don't know what this is
45 public static readonly int SystemDefaultCharSize = 2;
50 public static int AddRef (IntPtr pUnk) {
51 throw new NotImplementedException ();
54 [MethodImplAttribute(MethodImplOptions.InternalCall)]
55 public extern static IntPtr AllocCoTaskMem (int cb);
57 [MethodImplAttribute(MethodImplOptions.InternalCall)]
58 public extern static IntPtr AllocHGlobal (IntPtr cb);
60 public static IntPtr AllocHGlobal (int cb) {
61 return AllocHGlobal ((IntPtr)cb);
65 public static object BindToMoniker (string monikerName) {
66 throw new NotImplementedException ();
70 public static void ChangeWrapperHandleStrength (object otp, bool fIsWeak) {
71 throw new NotImplementedException ();
74 [MethodImplAttribute(MethodImplOptions.InternalCall)]
75 extern static void copy_to_unmanaged (Array source, int startIndex,
76 IntPtr destination, int length);
78 [MethodImplAttribute(MethodImplOptions.InternalCall)]
79 extern static void copy_from_unmanaged (IntPtr source, int startIndex,
80 Array destination, int length);
82 public static void Copy (byte[] source, int startIndex, IntPtr destination, int length) {
83 copy_to_unmanaged (source, startIndex, destination, length);
86 public static void Copy (char[] source, int startIndex, IntPtr destination, int length) {
87 copy_to_unmanaged (source, startIndex, destination, length);
90 public static void Copy (short[] source, int startIndex, IntPtr destination, int length) {
91 copy_to_unmanaged (source, startIndex, destination, length);
94 public static void Copy (int[] source, int startIndex, IntPtr destination, int length) {
95 copy_to_unmanaged (source, startIndex, destination, length);
98 public static void Copy (long[] source, int startIndex, IntPtr destination, int length) {
99 copy_to_unmanaged (source, startIndex, destination, length);
102 public static void Copy (float[] source, int startIndex, IntPtr destination, int length) {
103 copy_to_unmanaged (source, startIndex, destination, length);
106 public static void Copy (double[] source, int startIndex, IntPtr destination, int length) {
107 copy_to_unmanaged (source, startIndex, destination, length);
110 public static void Copy (IntPtr source, byte[] destination, int startIndex, int length) {
111 copy_from_unmanaged (source, startIndex, destination, length);
114 public static void Copy (IntPtr source, char[] destination, int startIndex, int length) {
115 copy_from_unmanaged (source, startIndex, destination, length);
118 public static void Copy (IntPtr source, short[] destination, int startIndex, int length) {
119 copy_from_unmanaged (source, startIndex, destination, length);
122 public static void Copy (IntPtr source, int[] destination, int startIndex, int length) {
123 copy_from_unmanaged (source, startIndex, destination, length);
126 public static void Copy (IntPtr source, long[] destination, int startIndex, int length) {
127 copy_from_unmanaged (source, startIndex, destination, length);
130 public static void Copy (IntPtr source, float[] destination, int startIndex, int length) {
131 copy_from_unmanaged (source, startIndex, destination, length);
134 public static void Copy (IntPtr source, double[] destination, int startIndex, int length) {
135 copy_from_unmanaged (source, startIndex, destination, length);
139 public static object CreateWrapperOfType (object o, Type t) {
140 throw new NotImplementedException ();
143 [MethodImplAttribute(MethodImplOptions.InternalCall)]
144 public extern static void DestroyStructure (IntPtr ptr, Type structuretype);
147 public static void FreeBSTR (IntPtr ptr) {
148 throw new NotImplementedException ();
151 [MethodImplAttribute(MethodImplOptions.InternalCall)]
152 public extern static void FreeCoTaskMem (IntPtr ptr);
154 [MethodImplAttribute(MethodImplOptions.InternalCall)]
155 public extern static void FreeHGlobal (IntPtr hglobal);
158 public static Guid GenerateGuidForType (Type type) {
159 throw new NotImplementedException ();
163 public static string GenerateProgIdForType (Type type) {
164 throw new NotImplementedException ();
168 public static object GetActiveObject (string progID) {
169 throw new NotImplementedException ();
173 public static IntPtr GetComInterfaceForObject (object o, Type T) {
174 throw new NotImplementedException ();
178 public static object GetComObjectData (object obj, object key) {
179 throw new NotImplementedException ();
183 public static int GetComSlotForMethodInfo (MemberInfo m) {
184 throw new NotImplementedException ();
188 public static int GetEndComSlot (Type t) {
189 throw new NotImplementedException ();
193 public static int GetExceptionCode() {
194 throw new NotImplementedException ();
198 public static IntPtr GetExceptionPointers() {
199 throw new NotImplementedException ();
203 public static IntPtr GetHINSTANCE (Module m) {
204 throw new NotImplementedException ();
208 public static int GetHRForException (Exception e) {
209 throw new NotImplementedException ();
213 public static int GetHRForLastWin32Error() {
214 throw new NotImplementedException ();
218 public static IntPtr GetIDispatchForObject (object o) {
219 throw new NotImplementedException ();
223 public static IntPtr GetITypeInfoForType (Type t) {
224 throw new NotImplementedException ();
228 public static IntPtr GetIUnknownForObject (object o) {
229 throw new NotImplementedException ();
232 [MethodImplAttribute(MethodImplOptions.InternalCall)]
233 public static extern int GetLastWin32Error();
236 public static IntPtr GetManagedThunkForUnmanagedMethodPtr (IntPtr pfnMethodToWrap, IntPtr pbSignature, int cbSignature) {
237 throw new NotImplementedException ();
241 public static MemberInfo GetMethodInfoForComSlot (Type t, int slot, ref ComMemberType memberType) {
242 throw new NotImplementedException ();
246 public static void GetNativeVariantForObject (object obj, IntPtr pDstNativeVariant) {
247 throw new NotImplementedException ();
251 public static object GetObjectForIUnknown (IntPtr pUnk) {
252 throw new NotImplementedException ();
256 public static object GetObjectForNativeVariant (IntPtr pSrcNativeVariant) {
257 throw new NotImplementedException ();
261 public static object[] GetObjectsForNativeVariants (IntPtr aSrcNativeVariant, int cVars) {
262 throw new NotImplementedException ();
266 public static int GetStartComSlot (Type t) {
267 throw new NotImplementedException ();
271 public static Thread GetThreadFromFiberCookie (int cookie) {
272 throw new NotImplementedException ();
276 public static object GetTypedObjectForIUnknown (IntPtr pUnk, Type t) {
277 throw new NotImplementedException ();
281 public static Type GetTypeForITypeInfo (IntPtr piTypeInfo) {
282 throw new NotImplementedException ();
286 public static string GetTypeInfoName (UCOMITypeInfo pTI) {
287 throw new NotImplementedException ();
291 public static Guid GetTypeLibGuid (UCOMITypeLib pTLB) {
292 throw new NotImplementedException ();
296 public static Guid GetTypeLibGuidForAssembly (Assembly asm) {
297 throw new NotImplementedException ();
301 public static int GetTypeLibLcid (UCOMITypeLib pTLB) {
302 throw new NotImplementedException ();
306 public static string GetTypeLibName (UCOMITypeLib pTLB) {
307 throw new NotImplementedException ();
311 public static IntPtr GetUnmanagedThunkForManagedMethodPtr (IntPtr pfnMethodToWrap, IntPtr pbSignature, int cbSignature) {
312 throw new NotImplementedException ();
316 public static bool IsComObject (object o) {
317 throw new NotImplementedException ();
321 public static bool IsTypeVisibleFromCom (Type t) {
322 throw new NotImplementedException ();
326 public static int NumParamBytes (MethodInfo m) {
327 throw new NotImplementedException ();
330 [MethodImplAttribute(MethodImplOptions.InternalCall)]
331 public extern static IntPtr OffsetOf (Type t, string fieldName);
333 [MethodImplAttribute(MethodImplOptions.InternalCall)]
334 public extern static void Prelink (MethodInfo m);
336 [MethodImplAttribute(MethodImplOptions.InternalCall)]
337 public extern static void PrelinkAll (Type c);
339 [MethodImplAttribute(MethodImplOptions.InternalCall)]
340 public extern static string PtrToStringAnsi (IntPtr ptr);
342 [MethodImplAttribute(MethodImplOptions.InternalCall)]
343 public extern static string PtrToStringAnsi (IntPtr ptr, int len);
345 [MethodImplAttribute(MethodImplOptions.InternalCall)]
346 public extern static string PtrToStringAuto (IntPtr ptr);
348 [MethodImplAttribute(MethodImplOptions.InternalCall)]
349 public extern static string PtrToStringAuto (IntPtr ptr, int len);
351 [MethodImplAttribute(MethodImplOptions.InternalCall)]
352 public extern static string PtrToStringUni (IntPtr ptr);
354 [MethodImplAttribute(MethodImplOptions.InternalCall)]
355 public extern static string PtrToStringUni (IntPtr ptr, int len);
357 [MethodImplAttribute(MethodImplOptions.InternalCall)]
358 public extern static string PtrToStringBSTR (IntPtr ptr);
360 [MethodImplAttribute(MethodImplOptions.InternalCall)]
361 public extern static void PtrToStructure (IntPtr ptr, object structure);
363 [MethodImplAttribute(MethodImplOptions.InternalCall)]
364 public extern static object PtrToStructure (IntPtr ptr, Type structureType);
367 public static int QueryInterface (IntPtr pUnk, ref Guid iid, out IntPtr ppv) {
368 throw new NotImplementedException ();
371 public static byte ReadByte (IntPtr ptr) {
372 return ReadByte (ptr, 0);
375 [MethodImplAttribute(MethodImplOptions.InternalCall)]
376 public extern static byte ReadByte (IntPtr ptr, int ofs);
379 public static byte ReadByte ([In, MarshalAs (UnmanagedType.AsAny)] object ptr, int ofs) {
380 throw new NotImplementedException ();
383 public static short ReadInt16 (IntPtr ptr) {
384 return ReadInt16 (ptr, 0);
387 [MethodImplAttribute(MethodImplOptions.InternalCall)]
388 public extern static short ReadInt16 (IntPtr ptr, int ofs);
391 public static short ReadInt16 ([In, MarshalAs(UnmanagedType.AsAny)] object ptr, int ofs) {
392 throw new NotImplementedException ();
395 public static int ReadInt32 (IntPtr ptr) {
396 return ReadInt32 (ptr, 0);
399 [MethodImplAttribute(MethodImplOptions.InternalCall)]
400 public extern static int ReadInt32 (IntPtr ptr, int ofs);
403 public static int ReadInt32 ([In, MarshalAs(UnmanagedType.AsAny)] object ptr, int ofs) {
404 throw new NotImplementedException ();
407 public static long ReadInt64 (IntPtr ptr) {
408 return ReadInt64 (ptr, 0);
411 [MethodImplAttribute(MethodImplOptions.InternalCall)]
412 public extern static long ReadInt64 (IntPtr ptr, int ofs);
415 public static long ReadInt64 ([In, MarshalAs (UnmanagedType.AsAny)] object ptr, int ofs) {
416 throw new NotImplementedException ();
419 public static IntPtr ReadIntPtr (IntPtr ptr) {
420 return ReadIntPtr (ptr, 0);
423 [MethodImplAttribute(MethodImplOptions.InternalCall)]
424 public extern static IntPtr ReadIntPtr (IntPtr ptr, int ofs);
427 public static IntPtr ReadIntPtr ([In, MarshalAs (UnmanagedType.AsAny)] object ptr, int ofs) {
428 throw new NotImplementedException ();
432 public static IntPtr ReAllocCoTaskMem (IntPtr pv, int cb) {
433 throw new NotImplementedException ();
436 [MethodImplAttribute(MethodImplOptions.InternalCall)]
437 public extern static IntPtr ReAllocHGlobal (IntPtr pv, IntPtr cb);
440 public static int Release (IntPtr pUnk) {
441 throw new NotImplementedException ();
445 public static int ReleaseComObject (object o) {
446 throw new NotImplementedException ();
450 public static void ReleaseThreadCache() {
451 throw new NotImplementedException ();
455 public static bool SetComObjectData (object obj, object key, object data) {
456 throw new NotImplementedException ();
459 public static int SizeOf (object structure) {
460 return SizeOf (structure.GetType ());
463 [MethodImplAttribute(MethodImplOptions.InternalCall)]
464 public extern static int SizeOf (Type t);
467 public static IntPtr StringToBSTR (string s) {
468 throw new NotImplementedException ();
471 public static IntPtr StringToCoTaskMemAnsi (string s) {
472 int length = s.Length + 1;
473 IntPtr ctm = AllocCoTaskMem (length);
475 byte[] asBytes = new byte[length];
476 for (int i = 0; i < s.Length; i++)
477 asBytes[i] = (byte)s[i];
478 asBytes[s.Length] = 0;
480 copy_to_unmanaged (asBytes, 0, ctm, length);
485 public static IntPtr StringToCoTaskMemAuto (string s) {
486 throw new NotImplementedException ();
489 public static IntPtr StringToCoTaskMemUni (string s) {
490 int length = s.Length + 1;
491 IntPtr ctm = AllocCoTaskMem (length * 2);
493 char[] asChars = new char[length];
494 s.CopyTo (0, asChars, 0, s.Length);
495 asChars[s.Length] = '\0';
497 copy_to_unmanaged (asChars, 0, ctm, length);
501 [MethodImplAttribute(MethodImplOptions.InternalCall)]
502 public extern static IntPtr StringToHGlobalAnsi (string s);
504 [MethodImplAttribute(MethodImplOptions.InternalCall)]
505 public extern static IntPtr StringToHGlobalAuto (string s);
507 [MethodImplAttribute(MethodImplOptions.InternalCall)]
508 public extern static IntPtr StringToHGlobalUni (string s);
510 [MethodImplAttribute(MethodImplOptions.InternalCall)]
511 public extern static void StructureToPtr (object structure, IntPtr ptr, bool fDeleteOld);
514 public static void ThrowExceptionForHR (int errorCode) {
515 throw new NotImplementedException ();
519 public static void ThrowExceptionForHR (int errorCode, IntPtr errorInfo) {
520 throw new NotImplementedException ();
523 [MethodImplAttribute(MethodImplOptions.InternalCall)]
524 public extern static IntPtr UnsafeAddrOfPinnedArrayElement (Array arr, int index);
526 public static void WriteByte (IntPtr ptr, byte val) {
527 WriteByte (ptr, 0, val);
530 [MethodImplAttribute(MethodImplOptions.InternalCall)]
531 public extern static void WriteByte (IntPtr ptr, int ofs, byte val);
534 public static void WriteByte ([In, Out, MarshalAs (UnmanagedType.AsAny)] object ptr, int ofs, byte val) {
535 throw new NotImplementedException ();
538 public static void WriteInt16 (IntPtr ptr, short val) {
539 WriteInt16 (ptr, 0, val);
542 [MethodImplAttribute(MethodImplOptions.InternalCall)]
543 public extern static void WriteInt16 (IntPtr ptr, int ofs, short val);
546 public static void WriteInt16 ([In, Out, MarshalAs (UnmanagedType.AsAny)] object ptr, int ofs, short val) {
547 throw new NotImplementedException ();
550 public static void WriteInt16 (IntPtr ptr, char val) {
551 WriteInt16 (ptr, 0, val);
555 [MethodImplAttribute(MethodImplOptions.InternalCall)]
556 public extern static void WriteInt16 (IntPtr ptr, int ofs, char val);
559 public static void WriteInt16([In, Out, MarshalAs(UnmanagedType.AsAny)] object ptr, int ofs, char val) {
560 throw new NotImplementedException ();
563 public static void WriteInt32 (IntPtr ptr, int val) {
564 WriteInt32 (ptr, 0, val);
567 [MethodImplAttribute(MethodImplOptions.InternalCall)]
568 public extern static void WriteInt32 (IntPtr ptr, int ofs, int val);
571 public static void WriteInt32([In, Out, MarshalAs(UnmanagedType.AsAny)] object ptr, int ofs, int val) {
572 throw new NotImplementedException ();
575 public static void WriteInt64 (IntPtr ptr, long val) {
576 WriteInt64 (ptr, 0, val);
579 [MethodImplAttribute(MethodImplOptions.InternalCall)]
580 public extern static void WriteInt64 (IntPtr ptr, int ofs, long val);
583 public static void WriteInt64 ([In, Out, MarshalAs (UnmanagedType.AsAny)] object ptr, int ofs, long val) {
584 throw new NotImplementedException ();
587 public static void WriteIntPtr (IntPtr ptr, IntPtr val) {
588 WriteIntPtr (ptr, 0, val);
591 [MethodImplAttribute(MethodImplOptions.InternalCall)]
592 public extern static void WriteIntPtr (IntPtr ptr, int ofs, IntPtr val);
595 public static void WriteIntPtr([In, Out, MarshalAs(UnmanagedType.AsAny)] object ptr, int ofs, IntPtr val) {
596 throw new NotImplementedException ();