Perl Automation Client

1. Install Strawberry Perl(x64) from http://strawberryperl.com/
2. Check the Perl version in cmd by calling “perl -v”
3. If it is giving the response then Perl is installed properly.
4. Your 64-Bit Automation Server is working with other clients.
5. Now run Perl script like “perl AutomationClient.pl” or you can directly call “AutomationClient.pl” in cmd.

Note: You have to update the appropriate CLSID in script.

Reference: https://docstore.mik.ua/orelly/perl4/perlnut/ch23_01.htm

Download the program file from here: Perl Automation Client

Steps and Program By: Prashant Patel (WinDev 2020)


Ruby Automation Client

1. Install Ruby(x64) without Devkit from https://rubyinstaller.org/downloads/
2. Check the Ruby version in cmd by calling “ruby -v”
3. If it is giving the response then Ruby is installed properly.
4. Your 64-Bit Automation Server is working with other clients.
5. Now run Ruby script like “ruby AutomationClient.rb” or you can directly call “AutomationClient.rb” in cmd.

Note: You have to update the appropriate CLSID in the script.

Reference: https://ruby-doc.org/stdlib-2.5.1/libdoc/win32ole/rdoc/WIN32OLE.html

Download the program file from here: Ruby Automation Client

Steps and Program By: Prashant Patel (WinDev 2020)


Log of COM Aggregation Program

Client calling CoCreateInstance…
Outer Component’s DLL is ATTACHED.
DllGetClassObject().
CSumSubtractClassFactory::CTOR().
CSumSubtractClassFactory::QueryInterface().
CSumSubtractClassFactory::AddRef().
CSumSubtractClassFactory::Release().
CSumSubtractClassFactory::CreateInstance().
CSumSubtract::CTOR().
CSumSubtractClassFactory::CreateInstance(): Calling pCSumSubtract->InitializeInnerComponent.
CSumSubtract::InitializeInnerComponent(): Calling CoCreateInstance with CLSID_MultiplicationDivision.
Inner Component’s DLL is ATTACHED.
DllGetClassObject():.
CMultiplicationDivisionClassFactory::CTOR()
CMultiplicationDivisionClassFactory::QueryInterface()
CMultiplicationDivisionClassFactory::AddRef()
CMultiplicationDivisionClassFactory::Release()
CMultiplicationDivisionClassFactory::CreateInstance(): pUnkOUter Not NULL
CMultiplicationDivision: CTOR:.
CMultiplicationDivision: CTOR:.pIUnknownOuter!=NULL
CMultiplicationDivision::QI_NoAggreration : (this).
CMultiplicationDivision::AddRef_NoAggregation():
CMultiplicationDivision::Release_NoAggregation():
CMultiplicationDivision::AddRef_NoAggregation():
CMultiplicationDivision::Release_NoAggregation():
CMultiplicationDivisionClassFactory::Release()
CMultiplicationDivisionClassFactory::DTOR()
CMultiplicationDivisionClassFactory::Release() : delete this
CMultiplicationDivision::QI_NoAggreration : (this).
CMultiplicationDivision::AddRef_NoAggregation():
CMultiplicationDivision::Release_NoAggregation():
CSumSubtract::InitializeInnerComponent(): Calling m_pIUnknownInner->QueryInterface: IID_IMultiplication.
CMultiplicationDivision::QI_NoAggreration : (this).
CMultiplicationDivision: AR().
CSumSubtract::AddRef().
CSumSubtract::InitializeInnerComponent(): Calling m_pIUnknownInner->QueryInterface: IID_IDivision.
CMultiplicationDivision::QI_NoAggreration : (this).
CMultiplicationDivision: AR().
CSumSubtract::AddRef().
CSumSubtract::InitializeInnerComponent(): Successfully completed..
CSumSubtract::QI(): (this).
CSumSubtract::AddRef().
CSumSubtract::Release().
CSumSubtract::AddRef().
CSumSubtract::Release().
CSumSubtractClassFactory::Release().
CSumSubtractClassFactory::DTOR().
CSumSubtract::QI(): (this).
CSumSubtract::AddRef().
CSumSubtract::Release().
Client calling pISum->SumOfTwoIntegers…
CSumSubtract::SumOfTwoIntegers().
Client calling pISum->QueryInterface()
CSumSubtract::QI(): (this).
CSumSubtract::AddRef().
Client calling pISum->Release()
CSumSubtract::Release().
Client calling pISum->SubtractionOfTwoIntegers()
CSumSubtract::SubtractionOfTwoIntegers().
Client calling pISubtract->QueryInterface(IID_IMultiplication)
CSumSubtract::QI(): IID_IMultiplication: m_pIUnknownInner->QueryInterface(riid,ppv).
CMultiplicationDivision::QI_NoAggreration : (this).
CMultiplicationDivision: AR().
CSumSubtract::AddRef().
Client calling pISubtract->Release()
CSumSubtract::Release().
Client calling pIMultiplication->MultiplicationOfTwoIntegers()
CMultiplicationDivision::MultiplicationOfTwoIntegers()
Client calling pIMultiplication->QueryInterface(IID_IDivision)
CMultiplicationDivision: QI().
CSumSubtract::QI(): IID_IDivision: m_pIUnknownInner->QueryInterface(riid,ppv).
CMultiplicationDivision::QI_NoAggreration : (this).
CMultiplicationDivision: AR().
CSumSubtract::AddRef().
Client calling pIMultiplication->Release()
CMultiplicationDivision: R().
CSumSubtract::Release().
Client calling pIDivision->DivisionOfTwoIntegers()
CMultiplicationDivision::DivisionOfTwoIntegers()
Client calling pIDivision->Release()
CMultiplicationDivision: R().
CSumSubtract::Release().
SafeInterfaceRelease().
DllCanUnloadNow():.
DllCanUnloadNow(): FAIL
DllCanUnloadNow().
DllCanUnloadNow(): FAIL..
Inner Component’s DLL is DETACHED.
Outer Component’s DLL is DETACHED.

download : aggregation Client Flow

By Unmesh Joshi
unmesh.joshi126@gmail.com