Admittedly, I can't read C#, but hopefully you'll get some help from this post anyway.
Something I noticed; you have a variable
sArr1, which is a pointer to a SAFEARRAY. When you call your
Test function, the argument is a pointer to this pointer to a SAFEARRAY; you should maybe call it like so:
SAFEARRAY *sArr1 = NULL;
iface.Test(sArr1);
It's not impossible you actually want to use this double pointer though.
Second idea; the message box comes from within the DLL, it may simply be complaining about the NULL-value.