I am getting an error in visual basic.net code when calling a function that returns an array of classes from the dll compiled in managed C++


Error:
"An unhandled exception of type 'System.Runtime.InteropServices.MarshalDirectiveEx ception' occurred in toolbartest.exe

Additional information: Can not marshal return value."

**********
C Code:
**********

#using <mscorlib.dll>
public __gc class gwindow {
public:
System::Int64 hwnd;
System::Int64 ipid;
System::String *szWindowText;
System::String *szClassText;
System::String *szExecFile;
};


gwindow *__declspec(dllexport) foo() __gc [];

gwindow * wn = new gwindow();
wn->hwnd = (System::Int64)(tempWind->hwnd);
wn->ipid = (System::Int64)(tempWind->pid);
arr->Add(wn);

gwindow *gwindows __gc [];
gwindows =
static_cast<__gc class gwindow * []>(arr->ToArray(__typeof( __gc class gwindow)));

return (gwindows);



*************
VB Code:
*************

Public Class gwindow
Dim hwnd As Int64
Dim ipid As Int64
Dim szWindowText As String
Dim szClassText As String
Dim szExecFile As String
End Class

<DllImport("library.dll")> _
Friend Shared Function foo() As gwindow()
End Function