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
Naveen K Kohli - 07 Sep 2004 17:11 GMT
There is an example at the following link. See if that helps.
http://www.netomatix.com/Development/EmbedStruct.aspx
Naveen Kohli
> Hello,
>
[quoted text clipped - 47 lines]
>
> Adlene Sifi