Contact Info

Crumbtrail

ActiveXperts.com » Network Component » How to Use Network Component » ICMP Ping » Visual C++

How to use ICMP in a Visual C++ project

Network Component provides an easy-to-use development interface to a variety of IP protocols. By using Network Component, you can very easily create or enhance applications with network features.

Network Component features the following: DNS, FTP, HTTP, HTTPs, ICMP Ping, IP-to-Country, MSN, NTP, RSH, SCP, SFTP, SNMP v1/v2c (Get, GetNext, Set), SNMP Traps, SNMP MIB, SSH, TCP, Telnet, TFTP, UDP, Telnet, Wake-On-LAN and more.

Network Component can be well integrated into any development platform that supports ActiveX objects.



Step 1: Download and install the Network Component

Download Network Component from the ActiveXperts Download Site and start the installation. The installation guides you through the installation process.

Step 2: Create a new Visual C++ project

Launch 'Microsoft Visual C++' from the Start menu, and choose 'New' from the 'File Menu'. The 'New' dialog appears.

Select the type of project (for instance: 'Win32 Console Application'), enter a 'Project name' and select the 'Location':

Visual C

(Click on the picture to enlarge)

Select the kind of project, for instance a 'Hello, world!' application and click 'Finish':

Visual C

(Click on the picture to enlarge)

Step 3: Refer to the Network Component Library and declare the objects

A new Project is created now.

Before you can use Network Component, you need to refer to the Network Component library. The actually reference files are shipped with the product and are located in the following directory:

C:\Program Files\ActiveXperts\Network Component\Examples\Visual C++\Include

Copy all files in the above directory ('AxNetwork.c', 'AxNetwork_i.c' and 'AxNetworkConstants.h') to your project directory.

IIcmp  *pIcmp = NULL;

Appendix: Full source code

// Demo.cpp : Defines the entry point for the console application.
//

#include <windows.h>
#include <stdio.h>
#include <comdef.h>
#include <atlbase.h>

#include "..\..\include\AxNetworkConstants.h"
#include "..\..\include\AxNetwork.h"
#include "..\..\include\AxNetwork_i.c"

////////////////////////////////////////////////////////////////////////////////

LPTSTR	ReadInput( LPCTSTR lpszTitle, BOOL bAllowEmpty = FALSE );
VOID	PrintComponentInfo( IIcmp *pIcmp );
LPTSTR	GetErrorDescription( LONG lLastError, IIcmp *pIcmp );

////////////////////////////////////////////////////////////////////////////////

int main()
{
	IIcmp		*pIcmp		= NULL;
	HRESULT		hr;
	LONG		lLastError	= -1L;
	LONG		lLastDuration = -1L, lLastTtl = -1L;
	LPTSTR		lptszHost	= NULL;
	int			i;

	// Initialize COM  
	CoInitialize(NULL);

	// Create objects
	hr = CoCreateInstance( CLSID_Icmp, NULL, CLSCTX_INPROC_SERVER, IID_IIcmp, (void**) &pIcmp );
	if( ! SUCCEEDED( hr ) )
	{
		_tprintf( _T("Unable to create Icmp object.\n") );
		goto _EndMain;
	}

	// A license key is required to unlock this component after the trial period has expired.
	// Call 'Activate' with a valid license key as its first parameter. Second parameter determines whether to save the license key permanently 
  // to the registry (True, so you need to call Activate only once), or not to store the key permanently (False, so you need to call Activate
	// every time the component is created). For details, see manual, chapter "Product Activation".
	/*
	pIcmp->Activate( _T("XXXXX-XXXXX-XXXXX", False );
	*/

	// Component information
	PrintComponentInfo( pIcmp );

	lptszHost = ReadInput( _T("Enter host: ") );
	pIcmp->put_Ttl( 255 );
	for( i = 0; i < 4; i++ )
	{
		pIcmp->Ping( _bstr_t( lptszHost ), 5000 );  // 5000: timeout in msecs
		pIcmp->get_LastError( &lLastError );
		if( lLastError != 0 )
		{
			_tprintf( _T("Ping, result: %ld (%s)\n"), lLastError, GetErrorDescription( lLastError, pIcmp ) );
		}
		else
		{
			pIcmp->get_LastDuration( &lLastDuration );
			pIcmp->get_LastTtl( &lLastTtl );
			_tprintf( _T("Reply from %s; time=%ld TTL=%ld\n"), lptszHost, lLastDuration, lLastTtl );
		}
		Sleep( 1000 );			
	}

	_tprintf( _T("\n") );

_EndMain:

	if( pIcmp != NULL ) 
		pIcmp->Release();

	CoUninitialize();

	_tprintf( _T("Ready.\n") );

	return 0;
}

///////////////////////////////////////////////////////////////////////////////////////////

LPTSTR ReadInput( LPCTSTR lptszTitle, BOOL bAllowEmpty )
{
	static TCHAR		tszInput [ 255 + 1 ] = { _T('\0') };

	_tprintf( _T("%s:\n"), lptszTitle );
	do
	{
		_tprintf ( _T("   > ") );
		fflush(stdin); 
		fflush(stdout); 
		_fgetts( tszInput, 255, stdin );
		if( tszInput[ 0 ] != _T('\0') && tszInput[ _tcsclen( tszInput ) - 1  ] == _T('\n') )
			tszInput[ _tcsclen( tszInput ) - 1  ] = _T('\0');
	} while( _tcsclen ( tszInput ) == 0 && ! bAllowEmpty );

	return tszInput;
}


///////////////////////////////////////////////////////////////////////////////////////////

LPTSTR GetErrorDescription( LONG lLastError, IIcmp *pIcmp )
{
	static TCHAR	tszErrorDescription[ 1024 + 1 ] = { _T('\0') };
	BSTR			bstrErrDescr = NULL;

	pIcmp->GetErrorDescription( lLastError, &bstrErrDescr );
	if( bstrErrDescr != NULL )
	{
		_stprintf_s( tszErrorDescription, 1024, _T("%ls"), bstrErrDescr );
		SysFreeString ( bstrErrDescr );

	}
	return tszErrorDescription;
}

///////////////////////////////////////////////////////////////////////////////////////////

VOID PrintComponentInfo( IIcmp *pIcmp )
{
/*
	BSTR bstrVersion = NULL, bstrBuild = NULL, bstrModule = NULL, bstrLicenseStatus = NULL, bstrLicenseKey = NULL;

	pIcmp->get_Version( &bstrVersion );
	pIcmp->get_Build( &bstrBuild );
	pIcmp->get_Module( &bstrModule );
	pIcmp->get_LicenseStatus( &bstrLicenseStatus );
	pIcmp->get_LicenseKey( &bstrLicenseKey );

  // Component info
	_tprintf( _T("ActiveXperts Email Component %s\nBuild: %s\nModule: %s\nLicense Status: %s\nLicense Key: %s\n\n"), bstrVersion, bstrBuild, bstrModule, bstrLicenseStatus, bstrLicenseKey );
*/
}

You can download the complete samples here. There are many other working Network Component scripts on our site and shipped with the product.

NOTE: Demo Projects are created with Microsoft Visual Studio 2008

The Network Component project ships with a set of Microsoft Visual Studio .NET samples, including samples for Microsoft Visual C# .NET. The projects are created with Microsoft Visual Studio 2008.

Users with a later version of Microsoft Visual Studio can open such a project. The Visual Studio Conversion Wizard will guide you through the process of converting the project to the version used.