函数指针作为参数的问题

mitgroupww 2012-03-19 10:04:15
在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的参数如何传进去呢?

...全文
480 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
mitgroupww 2012-03-21
  • 打赏
  • 举报
回复
自己去找资料看了,结贴。
mitgroupww 2012-03-19
  • 打赏
  • 举报
回复
TO:ouyh12345
谢谢你的指教,__stdcall就是CALLBACK吧,这个确实要加上。

TO:lys86_1205
谢谢兄弟,再问:
网上下载的头文件里面有③SOCKET __stdcall ConnectDevice(SELECT_DEVICE pSelectDeviceFunc,LPWSTR lpPassword=L"0000",LPWSTR devNameFilter=GOLDTEL_DEVICE_NAME_FLAG);

表示这个函数是个回调函数是吗?
你给的代码的
SOCKET __stdcall ConnectDevice(SELECT_DEVICE pSelectDeviceFunc,LPWSTR lpPassword=L"0000",LPWSTR devNameFilter=GOLDTEL_DEVICE_NAME_FLAG)
{
RemoteBthDevInfo m_Rb;
pSelectDeviceFunc(&m_Rb,5,NULL);
......;
}
是我们要自己写的方法实现是吗?
然后后面我们在自己调用吗? 那你觉得网上给的dll做了什么呢?
lys86_1205 2012-03-19
  • 打赏
  • 举报
回复
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);
W170532934 2012-03-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ouyh12345 的回复:]

void __stdcall fTest(RemoteBthDevInfo* devInfoArray, int arrayLen, __int64* devRemoteAddr)
[/Quote]
++
还有就是你的参数是否都符合要求
ouyh12345 2012-03-19
  • 打赏
  • 举报
回复
void __stdcall fTest(RemoteBthDevInfo* devInfoArray, int arrayLen, __int64* devRemoteAddr)
mitgroupww 2012-03-19
  • 打赏
  • 举报
回复
error LNK2019: unresolved external symbol "unsigned int __cdecl ConnectDevice(void (__cdecl*)(struct _RemoteBthDevInfo *,int,__int64 *),unsigned short *,unsigned short *)"
lys86_1205 2012-03-19
  • 打赏
  • 举报
回复
报什么错?
mitgroupww 2012-03-19
  • 打赏
  • 举报
回复
ConnectDevice(fTest,L"0000", GOLDTEL_DEVICE_NAME_FLAG);
这样也不行。
mitgroupww 2012-03-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lys86_1205 的回复:]
那说明ConnectDevice函数已经在dll文件里实现了,我们ConnectDevice(fTest)直接调用就行了。
[/Quote]

嗯,就是在直接调用的时候,编译通不过。
RemoteBthDevInfo m_Rb;

SELECT_DEVICE fSD;

fSD = fTest;

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

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

都有问题。

lys86_1205 2012-03-19
  • 打赏
  • 举报
回复
那说明ConnectDevice函数已经在dll文件里实现了,我们ConnectDevice(fTest)直接调用就行了。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧