BCB编写ocx控件,VC调用出错,上代码

对牛乱弹琴 2012-07-26 09:57:24

//下面是接口函数
STDMETHODIMP TPLCdebugFormImpl::GetMachinePos(long Height, BSTR* RecvVal)
{
try
{
WideString str = L"abcd";
*RecvVal = str;
}
catch(Exception &e)
{
//不写了,系统自动生成的
}
return S_OK;

}




//控件导入到VC里,接口如下:
CString GetMachinePos(long Height);



现在问题是,VC里调用这个函数程序会崩溃,就是那个常见的崩溃错误,
但是BCB里调用没错,求大神解释一下,这类问题 不知道怎么用google了
...全文
289 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
缘中人 2012-08-01
  • 打赏
  • 举报
回复
*RecvVal = str;
这个方法用copy试试
fxworld 2012-07-28
  • 打赏
  • 举报
回复
刚才没看回帖,其实1楼已经告诉你那里错了。


函数的调用端可以先申请保存字符串的内存,然后传递指针给调用函数,函数内再用内存拷贝函数给RecvVal 赋值就可以了。

对牛乱弹琴 2012-07-28
  • 打赏
  • 举报
回复
那我应该怎么写啊,还有,这里比较冷,你能告诉我哪里不冷吗 ,谢谢[Quote=引用 4 楼 的回复:]

呵呵,这个论坛比较冷,人比较少。


//这个地方有问题
*RecvVal = str.c_bstr();函数返回后,str就释放掉了,所以导致RecvVal指向了NULL指针,这在bcb上也要出错的。
[/Quote]
fxworld 2012-07-28
  • 打赏
  • 举报
回复
呵呵,这个论坛比较冷,人比较少。


//这个地方有问题
*RecvVal = str.c_bstr();函数返回后,str就释放掉了,所以导致RecvVal指向了NULL指针,这在bcb上也要出错的。
对牛乱弹琴 2012-07-28
  • 打赏
  • 举报
回复
好吧,我已经用这种方法实现了,传两个参数,没有返回值。
但是我想知道怎么传一个参数,但是有返回值。
因为在接口参数的属性里有选项,如果选择了Ret选项,就会把最后一个参数当做返回值
[Quote=引用 6 楼 的回复:]

刚才没看回帖,其实1楼已经告诉你那里错了。


函数的调用端可以先申请保存字符串的内存,然后传递指针给调用函数,函数内再用内存拷贝函数给RecvVal 赋值就可以了。
[/Quote]
对牛乱弹琴 2012-07-27
  • 打赏
  • 举报
回复
没人理我?为什么啊
对牛乱弹琴 2012-07-26
  • 打赏
  • 举报
回复
忘了说了,接口中 BSTR* RecvVal参数是“out”“ret”,也就是返回值,所以导入VC中只有一个参数
[Quote=引用 1 楼 的回复:]

接口中导入的函数定义和实际函数的参数数量都不一样吧?并且函数中传回的是自动变量,也是不应该的
[/Quote]
dataxdata 2012-07-26
  • 打赏
  • 举报
回复
接口中导入的函数定义和实际函数的参数数量都不一样吧?并且函数中传回的是自动变量,也是不应该的

703

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder ActiveX/COM/DCOM
社区管理员
  • ActiveX/COM/DCOM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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