Quote Originally Posted by Niya View Post
Assume this as your VB6 declaration:-
vb Code:
  1. Private Declare Sub ReadVB6StringArray Lib "PInvokeTestingGround.dll" (strn() As String)

But I'm reasonably certain its reading the SAFEARRAY correctly.
I've just realized something. I almost forgot that VB6 implicitly converts from Unicode to ANSI to Unicode again any string, even an arrray of strings, when you pass it to an external function As String. The KB article I linked above discusses this issue. In order to circumvent that, the article recommended calling a tweaked declaration of the native VarPtr function in a type library. It appears that the OP is already using that custom declare:

Code:
tmp = ProvaArrayString(VarPtrStringArray(s()))