Spesso sviluppando applicazioni Mobile, per questioni di spazio e performance è preferibile trasferire grand parte della Business in un Layer separato o meglio in una dll. Cosa succede pero' se la dll viene a mancare? Succede che il programma non potrà funzionare. Allora l' idea è proprio quella di capire quali programmi hanno in uso la mia DLL.

#include <apparc.h>
#include <eikapp.h>
#include <eikappui.h>
#include <coemain.h>
/**
* Otteniamo l' indirizzo completo 
* (Es: "c:\system\myapp\myapp.app")
* @param aPath On exit, contiene il percorso.
*/
EXPORT_C void MyDll::GetCallingAppPath(TDes& aPath)
{     aPath=((CEikAppUi*)CCoeEnv::Static()->AppUi())->Application()->DllName();
}

Poniamo al contrario di sapere quale sia l' applicazione che usa la nostra DLL ma comunque non riusciamo a trovare la location. Se la DLL faceva parte dello stesso Package della App la funzione da usare potrebbe essere qualcosa del genere.

/**
* Ottenere il Drive dove risiede la DLL
* (La nostra App e la DLL devono essere parte
* dello stesso SIS)
* @param aDrive On exit, contiene il Path.
* La descrizione deve poter contenere un max di 255 caratteri
*/
EXPORT_C void MyDll::GetInstallationDrive(TDes& aDrive)
{    
 // Get the path of the calling application
 TFileName appPath;
 GetCallingAppPath(appPath);
 // Parse the app name to get the drive
 TParse parser;
 parser.Set(appPath,NULL,NULL);
 aDrive=parser.Drive();
}