OCX开发,如何实现带字符串参数的方法?

cnwolfs 2014-03-25 10:57:52
OCX开发中,要引出几个方法,带参数的不懂实现。例如:
int LogIn(char* pIP, unsigned long pPort, char* pUserName, char* pPWD)
这个方法要引出。

我的写法:(也用过BSTR*之类的写法,都不对)
idl文件

helpstring("VivotekCam Control 的调度接口")]
dispinterface _DVivotekCam
{
properties:
methods:
[id(1), helpstring("method Test1")] int Test1(void);
[id(2), helpstring("method LogInTest")] int LogInTest(void);
[id(3), helpstring("method Test")] int Test(void);
[id(4), helpstring("method LogOut")] int LogOut(void);
[id(5), helpstring("method LogIn")] int LogIn(char* pIP, unsigned long pPort, char* pUserName, char* pPWD);
};


.h文件的写法

public:
enum {
dispidTest1 = 1L,
dispidLogInTest = 2L,
dispidTest = 3L,
dispidLogOut = 4L,
dispidLogIn = 5L
};

protected:
int LogIn(char* pIP, unsigned long pPort, char* pUserName, char* pPWD);


.CPP文件的写法

// 调度映射

BEGIN_DISPATCH_MAP(CVivotekCamCtrl, COleControl)
DISP_FUNCTION_ID(CVivotekCamCtrl, "LogIn", dispidLogIn, LogIn, VT_I2, VTS_PBSTR VTS_I4 VTS_PBSTR VTS_PBSTR)
END_DISPATCH_MAP()


int CVivotekCamCtrl::LogIn(char* pIP, unsigned long pPort, char* pUserName, char* pPWD)
{

return 0;
}



不带参数的已经可以成功调用了,但是带参数的没有办法实现,麻烦指点指点。




...全文
365 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
worldy 2014-03-25
  • 打赏
  • 举报
回复
使用BSTR是对的,但是,BSTR本身就是一个指针,不能使用BSTR*
cnwolfs 2014-03-25
  • 打赏
  • 举报
回复
原因主要是我对VC不熟悉 一直以为BSTR相当于char,因此认为char*必须写成BSTR*,因此一直认为必须写成VTS_PBSTR。 [id(5), helpstring("method LogIn")] int LogIn(BSTR pIP, unsigned long pPort, BSTR pUserName, BSTR pPWD); .h代码 int LogIn(char* pIP, unsigned long pPort, char* pUserName, char* pPWD); .cpp BEGIN_DISPATCH_MAP 代码 DISP_FUNCTION_ID(CVivotekCamCtrl, "LogIn", dispidLogIn, LogIn, VT_I2, VTS_BSTR VTS_I4 VTS_BSTR VTS_BSTR) int CVivotekCamCtrl::LogIn(char* pIP, unsigned long pPort, char* pUserName, char* pPWD) { }
  • 打赏
  • 举报
回复
引用 4 楼 worldy 的回复:
[quote=引用 3 楼 allenhiman 的回复:] BSTR应该就可以了 不过我记忆中char*也是可以的 先把你的VTS_PBSTR 全部改为VTS_BSTR试试看
使用char* 应该自己写调度代码 [/quote] COM下,使用char* 传字符串基本上都是错误的
oyljerry 2014-03-25
  • 打赏
  • 举报
回复
BSTR可以传COM类型字符串,注意分配,释放
Saleayas 2014-03-25
  • 打赏
  • 举报
回复
VAIANT
worldy 2014-03-25
  • 打赏
  • 举报
回复
引用 3 楼 allenhiman 的回复:
BSTR应该就可以了 不过我记忆中char*也是可以的 先把你的VTS_PBSTR 全部改为VTS_BSTR试试看
使用char* 应该自己写调度代码
allenhiman 2014-03-25
  • 打赏
  • 举报
回复
BSTR应该就可以了 不过我记忆中char*也是可以的 先把你的VTS_PBSTR 全部改为VTS_BSTR试试看
Freedom 2014-03-25
  • 打赏
  • 举报
回复
引用 1 楼 worldy 的回复:
使用BSTR是对的,但是,BSTR本身就是一个指针,不能使用BSTR*
++1

3,248

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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