大家好,我用MFC ActiveX ControlWizard封装了一个ocx,接口中有类似如下函数的一个操作:short CTLCardMisCtrl::testFunc(LPCTSTR parm1)
{
// TODO: Add your dispatch handler code here
OutPutData1[0]='a'; //OutPutData1为一个static数组
OutPutData1[1]='b';
OutPutData1[2]='c';
parm1=OutPutData1;
return 0;
}可是我在ActiveX Control Test Container下或web中用JS脚本调用,我在内存中看到parm1的地址正确指向了OutPutData的地址,并且内存中是‘abc’,但调用的程序并没有得到参数正确的赋值结果,请教大家是什么原因。
{
// TODO: Add your dispatch handler code here
OutPutData1[0]='a'; //OutPutData1为一个static数组
OutPutData1[1]='b';
OutPutData1[2]='c';
parm1=OutPutData1;
return 0;
}可是我在ActiveX Control Test Container下或web中用JS脚本调用,我在内存中看到parm1的地址正确指向了OutPutData的地址,并且内存中是‘abc’,但调用的程序并没有得到参数正确的赋值结果,请教大家是什么原因。
参数用BSTR等
{
// TODO: Add your dispatch handler code here
//char OutPutData1[5];
OutPutData1[0]='a';
OutPutData1[1]='b';
OutPutData1[2]='c';
parm1=_com_util::ConvertStringToBSTR(OutPutData1);
return 0;
}这么写不对?
你应该用memcpy之类的函数给parm1赋值
{
CComBSTR str;
str = L"abc";
*parm1 = str.Detach()
return 0;
}
short CTLCardMisCtrl::testFunc(BSTR * parm1)
{
// TODO: Add your dispatch handler code here
OutPutData1[0]='a';
OutPutData1[1]='b';
OutPutData1[2]='c';
*parm1 = _com_util::ConvertStringToBSTR(OutPutData1);
return 0;
}
exe中代码如下:
void CTestexe1Dlg::OnButton1()
{
// TODO: Add your control notification handler code here
char cParam1[20];
m_myOcx.testFunc(cParam1);
MessageBox(cParam1);
}仍然无法读出出ocx处理过的参数
{
// TODO: Add your control notification handler code here
_bstr_t cParam1;
m_myOcx.testFunc(&cParam1);
MessageBox((char *)cParam1);
}
void CTestexe1Dlg::OnButton1()
{
BSTR cParam1;
m_myOcx.testFunc(&cParam1);
MessageBox((char *)_bstr_t(cParam1));
}
既然testFunc返回了short, 那么传入的parm1是无法返回值的.