diff --git a/CefSharp/BindingHandler.cpp b/CefSharp/BindingHandler.cpp index 7420ed0a56..0881e84279 100644 --- a/CefSharp/BindingHandler.cpp +++ b/CefSharp/BindingHandler.cpp @@ -246,24 +246,25 @@ namespace CefSharp void BindingHandler::Bind(String^ name, Object^ obj, CefRefPtr window) { + // wrap the managed object in an unmanaged wrapper CefRefPtr bindingData = new BindingData(obj); - CefRefPtr handler = static_cast(new BindingHandler()); CefRefPtr userData = static_cast>(bindingData); + + // create the javascript object and associate the wrapped object CefRefPtr wrappedObject = window->CreateObject(NULL); wrappedObject->SetUserData(userData); + // build a list of methods on the bound object array^ methods = obj->GetType()->GetMethods(BindingFlags::Instance | BindingFlags::Public); - - IList^ methodNames = gcnew List(); + IDictionary^ methodNames = gcnew Dictionary(); for each(MethodInfo^ method in methods) { - if(!methodNames->Contains(method->Name)) - { - methodNames->Add(method->Name); - } + methodNames->Add(method->Name, nullptr); } - for each(String^ methodName in methodNames) + // create a corresponding javascript method for each c# method + CefRefPtr handler = static_cast(new BindingHandler()); + for each(String^ methodName in methodNames->Keys) { CefString nameStr = toNative(methodName); wrappedObject->SetValue(nameStr, CefV8Value::CreateFunction(nameStr, handler), V8_PROPERTY_ATTRIBUTE_NONE);