>>>> Should users always call QueryInterface to ensure that they have the
>>>> correct interface, or should the interface GUIDs be input into any
>>>> calls that return an interface?  Thoughts anyone?
>>>
>>> How will ND handle this?
>>
>> What we did when we changed some interfaces was change the GUID of
>> any parent object that would return a changed interface.
>>
>> So in your case, the IWVDevice and IWVProvider interfaces would
>> change
> too.
>
> Ok - then the WvProvider GUID basically controls all sub-interfaces
> then.  I like this better than forcing the user to call QueryInterface
> to get an updated interface.  Did you consider passing in the GUID to
> all calls that return an object?  If so, why didn't you select this
> option?  (I'm not suggesting that I like it better, just if there was
> a reason not to use it.)

The problem with passing the IID into the function is it assumes that the rest 
of the parameters are correct for the different interfaces, which may not be 
the case.

You could go with a model where you instantiate objects separately from 
initialization.  That is, a single call (CreateInstance?), that takes the IID 
of the child, and then the returned child interface would have an appropriate 
Initialize call that would take the actual parameters and perform the 
initialization.

For what we were doing it seemed less user-friendly, and much of what we were 
trying to do with NetworkDirect was create an interface that exposed common 
functionality in RDMA hardware while keeping it fairly straight forward to use 
(hence some of the design decisions like hiding protection domains, eliminating 
access rights form registrations and using windows for remote access, hiding 
work requests and work completions, etc.)

In any case, the provider implementation tends to split the constructor and 
initializer if you want to avoid throwing exceptions from the constructor 
anyway, so exposing that through the interfaces isn't a huge deal.

The main advantage with the CreateInstance/Initialize pairs is that it lets you 
extend the interfaces without having to rev all the GUIDs all the time.  It 
comes down with how often you expect to change interfaces, and how many prior 
interface versions you intend on supporting.

-Fab
_______________________________________________
ofw mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ofw

Reply via email to