读书人

函数指针作为参数的有关问题

发布时间: 2012-03-25 20:55:16 作者: rapoo

函数指针作为参数的问题
在EVC4.0下开发wince5.0的应用程序。

在网上下载了一份资料,提供了一个lib一个dll,还有一个头文件BlueToothCtrl.h。

在头文件BlueToothCtrl.h里面有如下定义:



①typedef struct _RemoteBthDevInfo

{

_RemoteBthDevInfo ()

{

memset ( szName, 0, sizeof(szName) );

memset ( &RemoteAddr, 0, sizeof(BT_ADDR) );

memset ( &LocalAddr, 0, sizeof(BT_ADDR) );

}

TCHAR szName[256]; //蓝牙设备名称;

BT_ADDR RemoteAddr; //蓝牙设备远程地址;

BT_ADDR LocalAddr;

TCHAR ServiceClassId[72];

} RemoteBthDevInfo;



②typedef void (__stdcall *SELECT_DEVICE)(RemoteBthDevInfo* devInfoArray, int arrayLen, __int64* devRemoteAddr);



③SOCKET __stdcall ConnectDevice(SELECT_DEVICE pSelectDeviceFunc,LPWSTR lpPassword=L"0000",LPWSTR devNameFilter=GOLDTEL_DEVICE_NAME_FLAG);

其中:

①是定义了一个结构体。

②是定义了一个函数指针类型。

③是一个连接蓝牙设备的函数。



现在的问题是:在我的cpp里面如何调用③地方法ConnectDevice。



我是这样做的:

第一步:在mycpp.cpp的顶部添加引用#include” BlueToothCtrl.h”

第二部:在mycpp.cpp中定义一个全局函数 void fTest(RemoteBthDevInfo* devInfoArray, int arrayLen, __int64* devRemoteAddr)

第三部:在myMethod()方法中代码如下:

RemoteBthDevInfo m_Rb;

SELECT_DEVICE fSD;

fSD = fTest;

问题来了:ConnectDevice函数如何调用?

我试了ConnectDevice(fSD, L"0000", GOLDTEL_DEVICE_NAME_FLAG);

和 ConnectDevice(fSD(&m_Rb, 5, NULL), L"0000", GOLDTEL_DEVICE_NAME_FLAG);

都有问题。

请教各位高手,这个ConnectDevice函数应该怎么写呀? SELECT_DEVICE的参数如何传进去呢?



[解决办法]
void __stdcall fTest(RemoteBthDevInfo* devInfoArray, int arrayLen, __int64* devRemoteAddr)
[解决办法]

探讨

void __stdcall fTest(RemoteBthDevInfo* devInfoArray, int arrayLen, __int64* devRemoteAddr)

[解决办法]
SELECT_DEVICE参数应该在ConnectDevice函数实现里面传
如:SOCKET __stdcall ConnectDevice(SELECT_DEVICE pSelectDeviceFunc,LPWSTR lpPassword=L"0000",LPWSTR devNameFilter=GOLDTEL_DEVICE_NAME_FLAG)
{
RemoteBthDevInfo m_Rb;
pSelectDeviceFunc(&m_Rb,5,NULL);
......;
}
在后面调用时 直接ConnectDevice(fTest,L"0000", GOLDTEL_DEVICE_NAME_FLAG);

读书人网 >C++

热点推荐