调试已通过。数据也能出来。但代码理解得不是很透。主要是函数之间的跳转。谁帮忙讲解下,越详细越好。谢谢!
// cellid.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "ril.h"
#include <windows.h>
#include <commctrl.h>
#include <iostream>
#include "afxwin.h"
HRESULT RILInitializeExt( void );//Initialize RIL
HRESULT Deinitialize( void );//deinitialize RIL
void RILResultCallback(DWORD dwResultCode, HRESULT hrCommandID, const void* pData, DWORD dwDataSize, DWORD dwParam);
void RILNotifyCallback( DWORD dwCode, const void* lpData, DWORD cbData, DWORD dwParam );
HRESULT g_hCellTowerInfo;
HRIL g_RilHandle = NULL;
RILCELLTOWERINFO *pCallInfo;
int _tmain(int argc, _TCHAR* argv[])
{
HRESULT hr = S_FALSE;
BOOL bResult = FALSE;
hr = RILInitializeExt( );
g_hCellTowerInfo = RIL_GetCellTowerInfo(g_RilHandle);
// This function retrieves information about the cell tower
//currently used by the phone.
if ( g_hCellTowerInfo > 0 )
{
bResult = TRUE;
Sleep( 1000 );
}
else
{
bResult = FALSE;
}
//输出
wchar_t *celldata = new wchar_t[100];
swprintf(celldata,L"%d,%d,%d,%d,%d",pCallInfo->dwCellID ,pCallInfo->dwBaseStationID ,pCallInfo->dwLocationAreaCode ,pCallInfo->dwMobileCountryCode ,pCallInfo->dwMobileNetworkCode );
AfxMessageBox(celldata);
Deinitialize();
// getchar();
return 0;
}
//初始化RIL
//Initialize RIL
HRESULT RILInitializeExt( void )
{
HRESULT hr = S_FALSE;
g_hCellTowerInfo = S_FALSE;
hr = RIL_Initialize( 1, RILResultCallback,
RILNotifyCallback, RIL_NCLASS_ALL, 0, &g_RilHandle );
g_hCellTowerInfo = S_FALSE;
return hr;
}
//初始化时用到的回调函数
void RILResultCallback(DWORD dwResultCode, HRESULT hrCommandID, const void* pData, DWORD dwDataSize, DWORD dwParam)
{
HRESULT hr = RIL_RESULT_OK;
switch ( dwResultCode )
{
case RIL_RESULT_OK:
{
if ( hrCommandID == g_hCellTowerInfo )
{
g_hCellTowerInfo = RIL_GetCellTowerInfo(g_RilHandle);
pCallInfo = ((RILCELLTOWERINFO *)pData);
}
else
break;
}
default:
break;
}
return;
}
void RILNotifyCallback(DWORD dwCode,const void* lpData,DWORD cbData,DWORD dwParam)
{
HRESULT hr = RIL_RESULT_OK;
DEBUGMSG( TRUE, ( L"RILNotifyCallback,( 0x%x )\n", dwCode ) );
}
//deinitialize RIL
//释放资源
HRESULT Deinitialize( void )
{
HRESULT hr = S_FALSE;
hr = RIL_Deinitialize( &g_RilHandle );
if ( FAILED( hr ) )
{
DEBUGMSG(TRUE, (L"RIL_Deinitialize failed, hr = %x\r\n", hr));
}
g_RilHandle = NULL;
return hr;
}
8 个解决方案
#1
无非就是用了RIL和回调函数,在RIL_Initialize函数中,黑盒分析:回调函数应该是赋给其他变量,在激活的时候,内部再调用这个变量(相当于调用了内部函数)。
#2
拜托详细点么~
#3
大家都很高傲啊
#4
其实我想问的问题可以简化成主要:
hr = RIL_Initialize( 1, RILResultCallback,
RILNotifyCallback, RIL_NCLASS_ALL, 0, &g_RilHandle );
这里面的RILResultCallback和RILNotifyCallback分别什么时候调用。
hr = RIL_Initialize( 1, RILResultCallback,
RILNotifyCallback, RIL_NCLASS_ALL, 0, &g_RilHandle );
这里面的RILResultCallback和RILNotifyCallback分别什么时候调用。
#5
是这样,RIL全部是回调方式实现的。简单的说就是先初始化,把回调函数指针传进去。等数据传过来了,你的回调函数也就是CALLBACK就被会调用.
#6
就是我上面说的,这个函数初始化的时候,把回调函数放进去(这个初始函数里面肯定会有类似与XX.YY= ZZZ,(ZZZ是回调函数类型的传入参数)这样的赋值,所以当系统获取到基站信息时,就可以直接调用XX.YY(...)这样的函数来调用回调函数了)
#7
解决 结贴
谢谢bsr2009 和 BEYONDMA
谢谢bsr2009 和 BEYONDMA
#8
学习。学习。
#1
无非就是用了RIL和回调函数,在RIL_Initialize函数中,黑盒分析:回调函数应该是赋给其他变量,在激活的时候,内部再调用这个变量(相当于调用了内部函数)。
#2
拜托详细点么~
#3
大家都很高傲啊
#4
其实我想问的问题可以简化成主要:
hr = RIL_Initialize( 1, RILResultCallback,
RILNotifyCallback, RIL_NCLASS_ALL, 0, &g_RilHandle );
这里面的RILResultCallback和RILNotifyCallback分别什么时候调用。
hr = RIL_Initialize( 1, RILResultCallback,
RILNotifyCallback, RIL_NCLASS_ALL, 0, &g_RilHandle );
这里面的RILResultCallback和RILNotifyCallback分别什么时候调用。
#5
是这样,RIL全部是回调方式实现的。简单的说就是先初始化,把回调函数指针传进去。等数据传过来了,你的回调函数也就是CALLBACK就被会调用.
#6
就是我上面说的,这个函数初始化的时候,把回调函数放进去(这个初始函数里面肯定会有类似与XX.YY= ZZZ,(ZZZ是回调函数类型的传入参数)这样的赋值,所以当系统获取到基站信息时,就可以直接调用XX.YY(...)这样的函数来调用回调函数了)
#7
解决 结贴
谢谢bsr2009 和 BEYONDMA
谢谢bsr2009 和 BEYONDMA
#8
学习。学习。