Adam Nathan's Old Blog

Please visit instead!

April, 2003

Blog - About

Who is Adam Nathan?

I'm not Adam Nathan the actor, although I did make an uncredited appearance as a "close-up extra" in the 1988 flop known as Tiger Warsaw because it was filmed in my home town.  (In fact, the Buhl Mansion mentioned on IMDb is where I got married!)

I'm also not Adam Nathan the pop star, because although I tried out for American Idol, I didn't make the cut. :)

Instead, I'm Adam Nathan the Software Design Engineer at Microsoft.  I'm created the prototype for what has become Microsoft Popfly, and am still on the team, loving every minute of it!  Prior to that, I was a member of the Common Language Runtime team for 6 years, so I got the privilege of being at the core of .NET technologies since the very beginning.

I'm the author of WPF Unleashed.NET and COM: The Complete Interoperability Guide, plus a co-author of ASP.NET: Tips, Tutorials, and Code, and a contributor to .NET Framework Standard Library Annotated Reference, Vol. 2.  I'm currently working on a new book, so stay tuned!

I'm also the creator of and its Visual Studio add-in, an online community-driven repository of PInvoke signatures that helps developers migrate to managed code.  I've also created the CLR SPY tool that opens the lid of the Common Language Runtime "black box" and enables developers to find and diagnose bugs in their managed code.  I've also recently put together, a wiki meant for sharing XAML samples.

I'm a regular speaker on the topic of managed code, interoperability, and WinFX.  I graduated from Cornell University with an honors B.S. degree in Computer Science.

  • Adam Nathan's Old Blog


    For managed signatures that represent unmanaged functions, the PreserveSig pseudo custom attribute controls an important aspect of run-time behavior. In COM Interop scenarios, a C# method defined as follows: string GetName(); is treated like the...
  • Adam Nathan's Old Blog

    Pseudo custom attributes

    Tomorrow I'd like to talk about the PreserveSig pseudo custom attribute, but first I thought I'd briefly point out the difference between pseudo custom attributes and "real" custom attributes. The CLR/.NET Framework has a handful of pseudo custom attributes...
  • Adam Nathan's Old Blog

    GetLastError and managed code

    In the Win32 world, calling the GetLastError API is often the mechanism to get additional error information when an API call fails. When calling these same Win32 APIs in managed code via PInvoke or via "It Just Works (IJW)" in managed C++, the rules are...
  • Adam Nathan's Old Blog

    UnmanagedType.Struct and VARIANT marshaling

    Continuing yesterday's theme of marshaling directives, today I'll talk about UnmanagedType.Struct, another poorly-named (and therefore confusing) enumeration value. If you pretend that it's called "UnmanagedType.Variant," it should make more sense. ...
  • Adam Nathan's Old Blog

    The confusing UnmanagedType.LPStruct marshaling directive

    MarshalAsAttribute controls marshaling behavior for managed data types that can have multiple unmanaged representations. Often, the challenge of using MarshalAsAttribute is choosing the right value from the UnmanagedType enumeration to pass to the attribute...
Page 1 of 1 (5 items)