somResolve

From EDM2
Jump to: navigation, search

This function obtains a pointer to the procedure that implements a method for a particular SOM object.

Syntax

SOMObject       obj;
somMToken       mToken;
somMethodPtr    rc;

rc = somResolve(obj, mToken);

Parameters

obj (SOMObject) 
A pointer to the object whose method procedure is required.
mToken (somMToken) 
The method token for the method to be resolved. The SOM API requires that if the class "XYZ" introduces the static method "foo", then the method token for "foo" is found in the class data structure for "XYZ" (called XYZClassData) in the structure member named "foo" (i.e., at XYZClassData.foo). Method tokens can also be obtained using the somGetMethodToken method.

Return Code

rc (somMethodPtr)
A pointer to the somMethodProc (procedure) that implements the specified method for the specified SOM object.

Remarks

This function returns a pointer to the procedure that implements the specified method for the specified SOM object. This pointer can then be used to invoke the method. The somResolve function can only be used to obtain a method procedure for a static method (one declared in an IDL or OIDL specification for a class); dynamic methods are not supported by method tokens.

For C and C++ programmers, the SOM usage bindings for SOM classes provide more convenient mechanisms for invoking methods. These bindings use the SOM_Resolve and SOM_ResolveNoCheck macros, which construct a method token expression from the class name and method name, and call somResolve.

Example Code

// SOM IDL for class A and class B
#include <somobj.idl>
module srExample {
  interface A : SOMObject  { void foo();  implementation
{ callstyle=oidl; }; };
  interface B : A  {  implementation { foo: override; }; };
};

// Example C++ program to implement and test  module scrExample
#define SOM_Module_srexample_Source
#include <srExample.ih>
#include <stdio.h>

SOM_Scope void SOMLINK srExample_Afoo(srExample_A *somSelf);
{  printf("1\n"); }

SOM_Scope void SOMLINK srExample_Bfoo(srExample_B *somSelf);
{ printf("2\n"); }

main()
{
  srExample_B  objPtr = srExample_BNew();

/* This prints  2 */
   ((somTD_srExample_A_foo)
/* this method procedure expression cast is necessary */
somResolve(objPtr, srExample_AClassData.foo)
   )     /* end of method procedure expression */
    (objPtr);
}

Related

Data Structures
  • somMethodPtr (sombtype.h)
  • somMToken (somapi.h)
Functions
Methods
Macros