Hello all,

If someone could help me out with this, I'd appreciate it very much.

I have this function signature in a Win32 .dll:

S32 AIL_enumerate_filter_attributes( HPROVIDER filter, HINTENUM *next, 
RIB_INTERFACE_ENTRY *dest )

the RIB_INTERFACE_ENTRY is a struct defined like so:

struct RIB_INTERFACE_ENTRY
{
   char const * entry_name;
   int type;
   int subtype;
}

I've attempted to define the struct in C# like so:

public struct RIBInterfaceEntry
{
    [MarshalAs( UnmanagedType.ByValTStr, SizeConst=128 )]
    public string name;
    int entrytype;
    int subtype
}

and wrapped the c++ method like so:

[DllImport( "mss32.dll", EntryPoint="AIL_enumerate_filter_attributes" )]
private static extern int EnumFilterAttributes( IntPtr filter, ref int next, ref 
RIBInterfaceEntry dest );

and call it like:

IntPtr next = 0;

public RIBInterfaceEntry[] GetFilterAttributes( DigitalFilter filter )
{
while ( true )
{
    RIBInterfaceEntry entry = new RIBInterfaceEntry();
    if ( EnumFilterAttributes( filter.Handle, ref next, ref entry ) == 0 ) break;
    // add the entry to an arraylist
}

// return arraylist.ToArray()
}

The DigitalFilter is another struct populated from another unmanaged call which holds 
all the available filters for a digital audio driver. When the app is run, and the 
GetFilterAttributes() method called, I don't get any run-time arrays, and stepping 
through the code shows the RIBInterfaceEntry[] array has a length of 2, but the 
individual properties of a specific entry don't seem right. The "Name" property has 
what appears to be a null terminator in it, and the 2 int properties are 0 (which is a 
valid value for the struct). But I was hoping to at least see a descriptive name of 
the entry, as in a C++ application I have that does basically the same thing 
(enumerates attributes, printf them to console window).

Thanks again, and in advance for any advice.

Ron

Reply via email to