Groups | Blog | Home
all groups > dotnet interop > september 2004 >

dotnet interop : P/Invoke and Managed C++



Adlene Sifi
9/5/2004 7:47:04 PM
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

Naveen K Kohli
9/7/2004 12:11:10 PM
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]

AddThis Social Bookmark Button