制作一个控件,需要传递一个函数进去我自己是这样定义的,跳出错误!
com内部//首先定义一个函数指针类型
typedef CString (*pFun)(CString p,long val);
//默认全局处理函数
CString xDefultFun(CString p,long val)
{
CString str;
str.Format(_T("%ld\0"),val);
return str;
}
pFun xFun;
CString xParameter;
//在构造函数里面初始化
xFun = xDefultFun;
xParameter = _T("");//定义的控件接口是这样的
//由于com接口只能支持一些通用的数据类型,我选择了LPCTSTR做为函数的类型
//有错的话就是这里,我不能确定正确的地方.
void CCurveShowCtrlCtrl::SetXConversionFun(LPCTSTR pActFun, LPCTSTR pParameter) 
{
// TODO: Add your dispatch handler code here
xFun = (pFun)pActFun;
xParameter = pParameter;
}使用控件,默认处理函数是没有错的,很正常.
调用控件情况控件的变量为: newCtrl//定义全局处理函数
CString xNewFun(CString p,long val)
{
CString str;
str.Format(_T("%ld\0"),val);
return str;
}
//控件调用,设置处理函数接口,把xNewFun指针传递进去
//传递的时候没有报错
//当控件调用xFun时就错了.
newCtrl.SetXConversionFun(LPCTSTR)xNewFun,_T("Test"));

解决方案 »

  1.   

    少个符号,纠正下
    newCtrl.SetXConversionFun((LPCTSTR)xNewFun,_T("Test"));
      

  2.   

    传函数指针用ULONG
    你可以把代码发给我,我帮你调好发给你
    [email protected]
      

  3.   

    用LPUNKNOWN型就好了。改成这样就好了
    void CCurveShowCtrlCtrl::SetXConversionFun(LPUNKNOWN pActFun, LPCTSTR pParameter) 
    {
        // TODO: Add your dispatch handler code here
        xFun = (pFun)pActFun;
        xParameter = pParameter;
    }
      

  4.   

    函数调用方式要注意一下 加上一个 CALLBACK