1. I used VIRIANT* instead of SAFEARRAY** to pass out a SAFEARRAY from COM to C++/C# client, because
 first time I used SAFEARRAY** and didn't make it: it kept throwing exception. I didn't figure out
 why. It may be something with COM or my code. Finally I turn out to use VIRIANT*, because I believe
 this is the Microsoft recommended way to pass out SAFEARRAY along with a lot of other types. You
 may want to take a look at my code, and determine what's happening there, if I made everything
 correctly (any memory leak?)

2. For the Windows_COM project, it was totally cleaned. You may need to use VS IDE to rebuild each
 project inside to generate all dll, exe, and do the registration to the system. Once the builds are
 done, you could use "demo.bat" to see my demostration.

3. The Linux_so_libaray project are already compiled. You could use "sh demo.sh" command to see my
 demostration directly.