为什么这个编译不过去?
我的ocx控件中,一个属性TradeCode,BSTR型。编译就报错,说未定义 _TradeCode
去掉_后,get倒是不报错了,set又报了。是不是我这样写错了?这方法是我一个朋友告诉我他是这样写的。
STDMETHODIMP Tricom_sjzImpl::get_TradeCode(BSTR* Value)
{
try
{
* Value = WideString(_TradeCode).Copy();
}
catch(Exception &e)
{
return Error(e.Message.c_str(), IID_Iricom_sjz);
}
return S_OK;
};
STDMETHODIMP Tricom_sjzImpl::set_TradeCode(BSTR Value)
{
try
{
_TradeCode = AnsiString(Value);
}
catch(Exception &e)
{
return Error(e.Message.c_str(), IID_Iricom_sjz);
}
return S_OK;
};
[解决办法]
你需要定义一个变量或数组来存储这个属性的值,例如在Imp单元头文件中的TActiveFormX类中添加:
public:// User declarations
wchar_t szTradeCode[256];
然后在Imp单元的.cpp文件中:
STDMETHODIMP Tricom_sjzImpl::get_TradeCode(BSTR* Value)
{
try
{
wcscpy(*Value, m_VclCtl->szTradeCode);
}
catch(Exception &e)
{
return Error(e.Message.c_str(), IID_IActiveFormX);
}
return S_OK;
};
STDMETHODIMP Tricom_sjzImpl::set_TradeCode(BSTR Value)
{
try
{
wcscpy(m_VclCtl->szTradeCode, Value);
}
catch(Exception &e)
{
return Error(e.Message.c_str(), IID_IActiveFormX);
}
return S_OK;
};