There is an example at the following link. See if that helps.
http://www.netomatix.com/Development/EmbedStruct.aspx Naveen Kohli
[quoted text, click to view] "Adlene Sifi" <Adlene Sifi@discussions.microsoft.com> wrote in message
news:1113DA9D-C756-4201-A67E-689436076883@microsoft.com...
> Hello,
>
> I am trying to call a C function from a dll. These function take a pointer
> to a structure as a parameter. This structure is allocated into the
> unmanged
> heap by the C function (it uses some malloc). I would like to know the
> best
> way to release this memory . For the moment I have created a new C
> function
> that release the memory and I call it from the managed code. For this to
> work
> I have to keep a pointer to my structure into the native code.
>
> Those are my two functions (from my class):
>
> A )
>
> [DllImport("ArutlManagedBridge.dll",
> EntryPoint="GetManagedEnvironment",CharSet=CharSet::Ansi,
> CallingConvention=CallingConvention::StdCall)]
>
> static System::Int32 GetManagedEnvironment(
> [InAttribute,OutAttribute,MarshalAs(UnmanagedType::Struct)]
> adsManagedGetEnvironment * GetEnvironment);
>
> B)
> [DllImport("ArutlManagedBridge.dll",
> EntryPoint="ReleaseEnvironment",CharSet=CharSet::Ansi,
> CallingConvention=CallingConvention::StdCall)]
>
> static System::Int32 ReleaseEnvironment();
>
>
> This is my structure :
>
> [StructLayout(LayoutKind::Sequential, CharSet=CharSet::Ansi)]
> public __value struct adsManagedGetEnvironment
> {
> [MarshalAs(UnmanagedType::ByValArray, SizeConst=2)]
> System::Int16 _null __gc[];
> System::IntPtr APXResult;
> System::Int32 APXStatus;
> [MarshalAs(UnmanagedType::ByValTStr, SizeConst=512)]
> System::String * APXMessage;
> System::IntPtr APXSupInfo;
> ...
> ...
> };
>
> Thanks a lot
>
> Adlene Sifi