Browse Source

Override the specific method named in the OverrideNativeAttribute

pull/1/head
Alex Corrado 15 years ago
parent
commit
462175cfc7
  1. 15
      src/Mono.VisualC.Interop/ABI/VTable.cs

15
src/Mono.VisualC.Interop/ABI/VTable.cs

@ -134,19 +134,26 @@ namespace Mono.VisualC.Interop.ABI {
public static bool BindToSignatureAndAttribute (MemberInfo member, object obj) public static bool BindToSignatureAndAttribute (MemberInfo member, object obj)
{ {
bool result = BindToSignature (member, obj); var overrideNative = member.GetCustomAttributes (typeof (OverrideNativeAttribute), true);
if (member.GetCustomAttributes (typeof (OverrideNativeAttribute), true).Length != 1) if (overrideNative.Length == 0)
return false; return false;
return result; var name = ((OverrideNativeAttribute)overrideNative [0]).NativeMethod ?? member.Name;
return BindToSignature (member, obj, name);
} }
public static bool BindToSignature (MemberInfo member, object obj) public static bool BindToSignature (MemberInfo member, object obj)
{
return BindToSignature (member, obj, member.Name);
}
public static bool BindToSignature (MemberInfo member, object obj, string nativeMethod)
{ {
MethodInfo imethod = (MethodInfo) obj; MethodInfo imethod = (MethodInfo) obj;
MethodInfo candidate = (MethodInfo) member; MethodInfo candidate = (MethodInfo) member;
if (!candidate.Name.Equals (imethod.Name)) if (nativeMethod != imethod.Name)
return false; return false;
ParameterInfo[] invokeParams = imethod.GetParameters (); ParameterInfo[] invokeParams = imethod.GetParameters ();

Loading…
Cancel
Save