Click to See Complete Forum and Search --> : Cannot marshal class array in function


szahn
March 21st, 2008, 06:55 PM
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.MarshalDirectiveException' 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

darwen
March 22nd, 2008, 06:17 AM
You don't need to use DllImport : this is for interfacing with native c++ classes.

Just add your dll as a reference to your VB.NET project and you get access to all 'public' __gc classes in it directly.

Darwen.

szahn
March 24th, 2008, 01:22 AM
I see. I never tried that before but i hope it works. Thank you so much!