自定义的ActiveX控件的属性报错,请专家解答

jone7319 2011-04-25 12:41:11
以下是我自定义的ActiveX控件的一个属性,报错

STDMETHODIMP TActiveFormXImpl::get_name(long* Value)
{
try
{
*Value=(long)name;
}
catch(Exception &e)
{
return Error(e.Message.c_str(), IID_aaa);
}
return S_OK;
};


STDMETHODIMP TActiveFormXImpl::set_name(long Value)
{
try
{
m_VclCtl->name=Value; //这里出错,提示 'name' is not a member of 'TWinControlAccess<TActiveFormX>'
}
catch(Exception &e)
{
return Error(e.Message.c_str(), IID_aaa);
}
return S_OK;
};

...全文
100 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
ccrun.com 2011-04-27
  • 打赏
  • 举报
回复
good!
jone7319 2011-04-27
  • 打赏
  • 举报
回复
终于搞定了,是因为在导入OCX时出了问题。谢谢大家
周药师 2011-04-27
  • 打赏
  • 举报
回复
你的CB6 是up4 ?
jone7319 2011-04-27
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 zhouzhangkui 的回复:]
我这里很正常,没有出现你的问题
你把你添加的属性部分去掉
看看自动生成的 会让你的IDE死不?
[/Quote]
不添加属性正常
jone7319 2011-04-27
  • 打赏
  • 举报
回复
再新建一个ActiveForm测试仍旧如故,崩溃退出
周药师 2011-04-26
  • 打赏
  • 举报
回复
我这里很正常,没有出现你的问题
你把你添加的属性部分去掉
看看自动生成的 会让你的IDE死不?
Waiting4you 2011-04-26
  • 打赏
  • 举报
回复
在BCB6下测试,没有问题。
可以编译,可以导入,把它放到其它窗体上,属性编辑里能看到name属性。
我的测试过程是这样的:
1.新建ActiveX Library, 加入Active Form(从你的代码上猜看应该是ActiveForm,呵呵)。
2.在BCB的类型库编译器(View->Type Library)里右击IActiveFormX,加入name属性。
3.点Reflash Implementation按钮,在ActiveFormImpl1.cpp的STDMETHODIMP TActiveFormXImpl::get_name(long* Value)和STDMETHODIMP TActiveFormXImpl::set_name(long Value)里填空,和你的代码一样。
4.在TActiveFormXImpl声明里加一个: long name;
5.编译,注册。
ccrun.com 2011-04-26
  • 打赏
  • 举报
回复
你这样试试:
在ActiveFormX的头文件类声明中:
public:		// User declarations
long m_name;


.cpp文件中:
STDMETHODIMP TActiveFormXImpl::get_name(long* Value)
{
try
{
*Value = m_VclCtl->m_name;
}
catch(Exception &e)
{
return Error(e.Message.c_str(), IID_IActiveFormX);
}
return S_OK;
};

STDMETHODIMP TActiveFormXImpl::set_name(long Value)
{
try
{
m_VclCtl->m_name = Value;
}
catch(Exception &e)
{
return Error(e.Message.c_str(), IID_IActiveFormX);
}
return S_OK;
};
jone7319 2011-04-26
  • 打赏
  • 举报
回复
应该不会错,我只是做个测试,加入一个自定义属性name,然后加入
STDMETHODIMP TActiveFormXImpl::get_name(long* Value)
{
try
{
*Value=(long)name;
}
catch(Exception &e)
{
return Error(e.Message.c_str(), IID_aaa);
}
return S_OK;
};


STDMETHODIMP TActiveFormXImpl::set_name(long Value)
{
try
{
name=Value;
}
catch(Exception &e)
{
return Error(e.Message.c_str(), IID_aaa);
}
return S_OK;
};

编译后生成 aaa.ocx 再导入 aaa.ocx ,将在IDE上可见的图标拉入 Form, IDE就直接崩溃退出了,我用的是BCB6,大家也可以测试下
ccrun.com 2011-04-26
  • 打赏
  • 举报
回复
m_VclCtl是ActiveForm工程中默认的Form对象。
jaffy 2011-04-26
  • 打赏
  • 举报
回复
m_VclCtl是什么东东,需要先说明下
Waiting4you 2011-04-26
  • 打赏
  • 举报
回复
这个name变量是自定义的吗?从上面的代码看name=Value; 绝对是不会错的,崩溃应该是别的地方的问题
我不懂电脑 2011-04-25
  • 打赏
  • 举报
回复
看看m_VclCtl->后,能提示出name这个属性不?
jone7319 2011-04-25
  • 打赏
  • 举报
回复
通过看了老妖网站的的《C++Builder5开发人员指南》一书,按照书中的例子将 name=Value改成m_VclCtl->name=Value; 编译没通过;
jone7319 2011-04-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ccrun 的回复:]
m_VclCtl->name=Value;
换成
name=Value;
[/Quote]
我之前就是这样做的,编辑通过,但加入到工程后直接崩溃!
ccrun.com 2011-04-25
  • 打赏
  • 举报
回复
m_VclCtl->name=Value;
换成
name=Value;

703

社区成员

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

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