COM Interface Question

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Olaf Meding

    COM Interface Question

    I am having trouble with the 'User' property (get and put), found near
    the bottom of the IDL file listed below. The user get call seems to
    return None, not sure why.

    More importantly, is there another way to get the 'IUser' value
    required for the user put call? (Perhaps I need to make the put call
    before the get call).

    Sorry for the long IDL file, tried to delete a lot of non-relevant
    code. Thanks so much for your help on this one.

    Olaf


    // ERFile.idl : IDL source for ERFile.dll
    //

    // This file will be processed by the MIDL tool to
    // produce the type library (ERFile.tlb) and marshalling code.

    import "oaidl.idl" ;
    import "ocidl.idl" ;

    [
    uuid(bf79b6c5-47be-11d2-bacd-006008060a3a),
    version(1.0),
    helpstring("ERF ile 1.0 Type Library")
    ]
    library ERFile
    {
    importlib("stdo le32.tlb");
    importlib("stdo le2.tlb");


    [
    object,
    uuid(bf79b6c7-47be-11d2-bacd-006008060a3a),
    dual,
    helpstring("IER ecord Interface"),
    pointer_default (unique),
    nonextensible,
    hidden
    ]
    interface IUser : IDispatch
    {
    [id(1), helpstring("met hod Login")]
    HRESULT Login([in] BSTR Username, [in] BSTR Password);

    code deleted here

    };


    [
    object,
    uuid(bf79b6c9-47be-11d2-bacd-006008060a3a),
    dual,
    helpstring("IER ecord Interface"),
    pointer_default (unique),
    nonextensible,
    hidden
    ]
    interface IERecord : IDispatch
    {
    [propget, id(1), helpstring("pro perty User")]
    HRESULT User([out, retval] IUser* *pVal);

    [propput, id(1), helpstring("pro perty User")]
    HRESULT User([in] IUser *newVal);

    code delted here

    };

    code delted here
    };
  • Mark Hammond

    #2
    Re: COM Interface Question

    Olaf Meding wrote:
    [color=blue]
    > I am having trouble with the 'User' property (get and put), found near
    > the bottom of the IDL file listed below. The user get call seems to
    > return None, not sure why.[/color]

    Possibly as the property has no value yet. After a successful set, you
    may find it works.
    [color=blue]
    > More importantly, is there another way to get the 'IUser' value
    > required for the user put call? (Perhaps I need to make the put call
    > before the get call).[/color]

    It depends on the application - there will generally be either a progid
    (so Dispatch() can create one), or some technique in the object model
    for creating one. The last alternative is that they expect you to
    implement this interface, but with the limited information available
    here, that sounds unlikely.

    Mark.

    Comment

    • Olaf Meding

      #3
      Re: COM Interface Question

      Mark

      The IDL shows a uuid for the IUser interface (bf79...). How would I use
      IDispatch() to create an IUser as required by the put user call?

      Here are excerpts from the IDL file:
      [
      object,
      uuid(bf79b6c7-47be-11d2-bacd-006008060a3a),
      dual,
      helpstring("IER ecord Interface"),
      pointer_default (unique),
      nonextensible,
      hidden
      ]
      interface IUser : IDispatch

      interface IERecord : IDispatch
      {
      [propput, id(1), helpstring("pro perty User")]
      HRESULT User([in] IUser *newVal);



      Again, your help is much appreciated.

      Olaf




      Comment

      • Mark Hammond

        #4
        Re: COM Interface Question

        Olaf Meding wrote:
        [color=blue]
        > Mark
        >
        > The IDL shows a uuid for the IUser interface (bf79...). How would I use
        > IDispatch() to create an IUser as required by the put user call?
        >
        > Here are excerpts from the IDL file:[/color]

        There is nothing in that IDL that implies it can be created by an
        IDispatch call - it is just describing the interface. Generally a
        CoClass entry in the IDL indicates it can be publically created, but you
        haven't shown that - but in that case, the makepy code will include a
        comment telling you the progid, so I doubt it exists.

        Surely there is documentation or a sample (in any language) for this object?

        Mark.

        Comment

        Working...