Hi,
I am trying to use my .Net component from COM application.
I have some static members in my .Net component.
I tried to use reflection to invoke static members.
Any body has example of invoking static members?
Thanks
Mohammad
namespace Mcc.TestAutomation.Utilities
{
public class MyStatics
{
static MyStatics()
{
}
public static void printHelloWorld()
{
Console.Out.WriteLine("Hello World!");
}
}
}
And Adam Nathan Book. But it can not call my static member
HRESULT InvokeStaticMember(BSTR typeName, BSTR memberName,
BindingFlags memberType, SAFEARRAY* parameters, VARIANT* retval)
{
HRESULT hresult;
IUnknown * pUnk = NULL;
_Object* pObj = NULL;
_Type* pType = NULL;
_Type* pTypeOfType = NULL;
_Type* pDesiredType = NULL;
VARIANT typeNameParam;
VARIANT getTypeRetVal;
VARIANT nullObject;
SAFEARRAY* psa;
LONG index;
BSTR getTypeName = SysAllocString(L"GetType");
VariantInit(&typeNameParam);
VariantInit(&getTypeRetVal);
VariantInit(&nullObject);
hresult = CoCreateInstance(CLSID_Object, NULL, CLSCTX_INPROC_SERVER,
IID_IUnknown, (void **)&pUnk);
if (FAILED(hresult)) goto cleanup;
//Get The object Interface so we can call GetType
hresult = pUnk->QueryInterface(IID__Object, (void **)&pObj);
if (FAILED(hresult)) goto cleanup;
hresult = pObj->GetType(&pType);
if (FAILED(hresult)) goto cleanup;
hresult = pType->GetType(&pTypeOfType);
if (FAILED(hresult)) goto cleanup;
psa = SafeArrayCreateVector(VT_VARIANT, 0, 1);
typeNameParam.vt = VT_BSTR;
typeNameParam.bstrVal = typeName;
index =0;
hresult = SafeArrayPutElement(psa, &index, &typeNameParam);
if (FAILED(hresult)) goto cleanup;
nullObject.vt = VT_EMPTY;
hresult = pTypeOfType->InvokeMember_3(getTypeName,
(BindingFlags)(BindingFlags_InvokeMethod | BindingFlags_Public |
BindingFlags_Static | BindingFlags_FlattenHierarchy), NULL,
nullObject, psa, &getTypeRetVal);
if (FAILED(hresult)) goto cleanup;
hresult = getTypeRetVal.punkVal->QueryInterface(IID__Type, (void **)
&pDesiredType);
if (FAILED(hresult)) goto cleanup;
hresult = pDesiredType->InvokeMember_3(memberName,
(BindingFlags) (memberType | BindingFlags_Public |
BindingFlags_Static | BindingFlags_FlattenHierarchy), NULL,
nullObject, parameters, retval);
if (FAILED(hresult)) goto cleanup;
cleanup:
if (pUnk) pUnk->Release();
if (pObj) pObj->Release();
if (pType) pType->Release();
if (pTypeOfType) pTypeOfType->Release();
if (pDesiredType) pDesiredType->Release();
if (getTypeName) SysFreeString(getTypeName);
SafeArrayDestroy(psa);
VariantClear(&typeNameParam);
VariantClear(&getTypeRetVal);
VariantClear(&nullObject);
return hresult;