XLL只适用于特定的Excel工作表,尽pipe完全合格的范围参数

我有一个XLL文件(使用xll.codeplex.com库)与下面的代码:

xll_rootfinder(TCHAR* x, TCHAR* y, const double min, const double max) { #pragma XLLEXPORT try { ExcelX(xlcCalculateDocument); be = ExcelX(xlfTextref, OPERX(x), OPERX(true)); nav = ExcelX(xlfTextref, OPERX(y), OPERX(true)); typedef std::pair<double, double> Result; boost::uintmax_t max_iter=50; boost::math::tools::eps_tolerance<double> tol(5); Result r1 = boost::math::tools::toms748_solve(recalc, min, max, tol, max_iter); } 

这个函数然后在VBA中重复调用。 参数x和y是范围地址,如“XX”!B42。 工作表名称是dynamic的。 VBA例程激活特定的工作表,然后使用该工作表上的XLL函数进行计算。 如果我手动运行VBA子版,在正确的工作表上启动,一切都将工作(直到它需要切换工作表)。 所以我不相信这是一个C ++的问题。 如果我从其他工作表中启动子工作表,Excel将在第一次XLL调用时立即崩溃:

  Call Application.Run("ROOTFINDER", PriceAddress, NAVAddress, 45, 500) 

在我的代码中没有对ThisWorksheet或ActiveWorksheet的引用。 我已经设置了断点,并确保工作表variables设置正确。

为什么XLL在访问新激活的表单时似乎遇到了问题,尽pipe给定了正确的范围地址(包括表单名称)?

非常感激。

而不是TCHAR *使用XLOPER。 Excel将为您完成这项工作。 您只需将参数声明为XLL_XLOPER而不是XLL_OPER就可以使用范围而不是值。 或者,也许我不了解你真正的问题。 TOMS 748.为什么要把这个拖到这里? 只需直接调用Fortran。 英特尔有一个高度优化的库。 看看codeplex上的xllblas或xlllapack项目,让我知道你在想什么。