Hi Antonio,
I agree with you, probably cisco doesn't care too much on dll naming because they give a c++ lib, which contains directly the reference to the correct dll file.
For your second question, I didn't find any sample application, I have to do it by myself. I developed C# libraries as interops of the rtplib and tapi, and works well now...
I have a c++ console app that works for debug purposes... I'll post here some sample code for minimum handling...
I have a CTapiLine class, this function enables handling of dev specific events...
BOOL CTapiLine:

evSpecEnableStreamData()
{
int dwSize = sizeof (VARSTRING) + 1024;
VARSTRING* pDeviceID = pDeviceID = (VARSTRING *) calloc (1, dwSize);
pDeviceID->dwTotalSize = dwSize;
//Fill in Structure
long lResult = lineGetID (m_LineHandle, 0, NULL, LINECALLSELECT_LINE, pDeviceID, "ciscowave/out");
if(lResult != NO_ERROR)
CSmLogger::AddLogText(1, TAPI_LOG_HANDLE, "[CTapiLine:

evSpecEnableStreamData]\r\n"
"\tName: %s\r\n"
"\tlineGetID Error %s", GetName(), CTapiEnvironment::GetTAPIErrorString(lResult));
else
{
m_EndPointDevId = (DWORD) *((DWORD *) ((LPSTR) pDeviceID + pDeviceID->dwStringOffset));
CSmLogger::AddLogText(1, TAPI_LOG_HANDLE, "[CTapiLine:

evSpecEnableStreamData]\r\n"
"\tName: %s\r\n"
"\m_EndPointDevId: %d", GetName(), m_EndPointDevId);
}
CCiscoLineDevSpecificSetStatusMsgs _statusMsg;
_statusMsg.m_DevSpecificStatusMsgsFlag = DEVSPECIFIC_MEDIA_STREAM;
CSmLogger::AddLogText(1, TAPI_LOG_HANDLE, "[CTapiLine:

evSpecEnableStreamData]\r\n"
"\tName: %s\r\n"
"\_statusMsg.GetMsgType(): %d\r\n"
"\_statusMsg.dwSize() %d", GetName(), _statusMsg.GetMsgType(), _statusMsg.dwSize());
lResult = lineDevSpecific(m_LineHandle, 0, NULL, _statusMsg.lpParams(), _statusMsg.dwSize());
if(lResult > 0)
{
CSmLogger::AddLogText(1, TAPI_LOG_HANDLE, "[CTapiLine:

evSpecEnableStreamData]\r\n"
"\tName: %s\r\n"
"\tlineDevSpecific RequestId = 0x%08x (%d)", GetName(), lResult, lResult);
AddRequest(lResult, NULL);
}
else if(lResult != NO_ERROR)
CSmLogger::AddLogText(1, TAPI_LOG_HANDLE, "[CTapiLine:

evSpecEnableStreamData]\r\n"
"\tName: %s\r\n"
"\tlineDevSpecific Error %s", GetName(), CTapiEnvironment::GetTAPIErrorString(lResult));
return lResult > 0;
}
This function instead manages events from devSpecific and plays data
void CTapiLine:

nDevSpecificMessage(LINEMESSAGE message)
{
DWORD CiscoMessageType = message.dwParam1 & 0x000000FF;
CSmLogger::AddLogText(0, TAPI_LOG_HANDLE, "[CTapiLine:

nDevSpecificMessage] CiscoMessageType 0x%08x", CiscoMessageType);
switch(CiscoMessageType)
{
case SLDSMT_START_TRANSMISION:
{
CSmLogger::AddLogText(0, TAPI_LOG_HANDLE, "[CTapiLine:

nDevSpecificMessage] Received START_TRANSMISION");
if(m_hEndPoint == NULL)
{
m_hEndPoint = EpOpenById(m_EndPointDevId, Both, EndPointCBK);
}
HANDLE hStream = EpGetStreamHandle(m_hEndPoint, STREAM_TYPE_AUDIO, ToNwk);
if(hStream != NULL)
{
if(EpStreamStart(hStream, EndPointCBK))
{
int lSize;
PUCHAR buffer;
FILE* pFile = fopen("d:\\downloads\\test.raw", "rb");
size_t result;
// obtain file size:
fseek (pFile , 0 , SEEK_END);
lSize = ftell (pFile);
rewind (pFile);
// allocate memory to contain the whole file:
buffer = (PUCHAR) malloc (sizeof(PUCHAR)*lSize);
// copy the file into the buffer:
result = fread (buffer,1,lSize,pFile);
if (result != lSize) {fputs ("Reading error",stderr); exit (3);}
/* the whole file is now loaded in the memory buffer. */
// terminate
fclose (pFile);
EpStreamWrite(hStream, buffer, lSize, new GUID(), EndPointCBK);
}
}
}
break;
case SLDSMT_STOP_TRANSMISION:
{
CSmLogger::AddLogText(0, TAPI_LOG_HANDLE, "[CTapiLine:

nDevSpecificMessage] Received STOP_TRANSMISION");
if(m_hEndPoint != NULL)
{
HANDLE hStream = EpGetStreamHandle(m_hEndPoint, STREAM_TYPE_AUDIO, ToNwk);
if(hStream != NULL)
{
EpStreamStop(hStream);
}
EpClose(m_hEndPoint, Both);
m_hEndPoint = NULL;
}
}
break;
case SLDSMT_START_RECEPTION:
{
CSmLogger::AddLogText(0, TAPI_LOG_HANDLE, "[CTapiLine:

nDevSpecificMessage] Received START_RECEPTION");
if(m_hEndPoint == NULL)
{
m_hEndPoint = EpOpenById(m_EndPointDevId, Both, EndPointCBK);
}
}
break;
case SLDSMT_STOP_RECEPTION:
{
CSmLogger::AddLogText(0, TAPI_LOG_HANDLE, "[CTapiLine:

nDevSpecificMessage] Received STOP_RECEPTION");
if(m_hEndPoint != NULL)
{
HANDLE hStream = EpGetStreamHandle(m_hEndPoint, STREAM_TYPE_AUDIO, ToApp);
if(hStream != NULL)
{
EpStreamStop(hStream);
}
EpClose(m_hEndPoint, Both);
m_hEndPoint = NULL;
}
}
break;
}
}