Hi ,
I want to marshal following C structure .
----------------------------
[C]
struct Foo
{
int First;
int Second;
};
struct FooList
{
int Count;
Foo List[1];
};
void GetFooList(struct * FooList fList);
I am doing it following way
[C#]
--------------------
[StructLayout(LayoutKind.Sequential)]
class Foo
{
public Int32 First;
public Int32 Second;
}
[StructLayout(LayoutKind.Sequential)]
class FooList
{
public Int32 Count;
private IntPtr list;//pointer to first
public Foo[] Foos
{
//???? HOW TO DO THIS
}
}
My problem is how to form objects from IntPtr and return as Foo[].
(If i directly use Marshal.PtrToStruct(list,typeof(Foo)); it throws
object reference not set to object while access Foo.First.)
I googled about it and I found a solution which uses kernel32.dll and
uses GlobalFree, GlobalAlloc API's. But I am do not want to use
kernel32.dll. Is there any other solution to above problem.
-Void Ptr.
Mattias Sjögren - 09 Sep 2005 20:17 GMT
See if this helps
http://www.dotnetinterop.com/faq/?q=StructWithStructArray
http://www.dotnetinterop.com/faq/?q=VariableLengthStruct
Mattias

Signature
Mattias Sjögren [MVP] mattias @ mvps.org
http://www.msjogren.net/dotnet/ | http://www.dotnetinterop.com
Please reply only to the newsgroup.