XLL由XLW制造,BOOST UBLAS MyMatrix数据类型转换为双**失败
XLL Made By XLW with BOOST UBLAS MyMatrix Data Type Conversion to Double ** Failing
我正在使用XLW创建XLL函数,以便在Excel中注册。XLL调用C++DLL中的实际数学模型。
我使用BOOST和UBLAS来帮助从XLL MyMatrix数据类型转换为C++DLL用于输入的双**。这是正确构建的,并且我可以在我的开发环境中正确地使用带有数组输入和输出的函数。
但是,当我使用InstallShield安装程序在目标计算机上安装Excel加载项时,具有数组输入的函数会返回"转换为双精度"错误,而不是函数从C++DLL返回的值。
这是我迄今为止尝试过的,但没有成功:
1.使用BOOST BCP收集所有数值库(UBLAS没有出现),我将其包含在我的Visual Studio 2013项目中。然后,我将BOOST_ROOT从包含和使用项目属性中删除,这样它就可以使用项目中的内容(据我所知)
-
在目标计算机上为这两个位安装所有的Microsoft C++可再发行程序。
-
在目标计算机上下载并构建BOOST,并创建BOOST_ROOT环境变量。在目标计算机上安装XLW,并匹配目标计算机上开发环境中的所有环境变量。
-
使用依赖项Walker验证所有依赖DLL都在目标计算机上。
都没有运气。我需要在安装程序中包含什么?谢谢你抽出时间。
开发环境:带有Visual Studio 2013和2015 的Windows 10
目标计算机:带有Office 2016 的Windows 10
MyMatrix声明:
namespace xlw {
#ifdef USE_XLW_WITH_BOOST_UBLAS
#define USE_PARENTHESESES
typedef boost::numeric::ublas::matrix<double> MyMatrix;
typedef boost::numeric::ublas::vector<double> MyArray;
typedef MyMatrix NEMatrix;
函数声明中的MyMatrix:
MyMatrix
ExcelFunctionName(
double Function,
double ReportDate,
double TotalOptIssued,
double PrevestForfOpt,
double NonvestedOpt,
double ExpectedTurnoverRate,
const MyMatrix VestingSchedule
调用C++DLL并使用Box将MyMatrix转换为双**
Error err = CPPDLLFunctionName(Function, ReportDate, TotalOptIssued, PrevestForfOpt, NonvestedOpt, ExpectedTurnoverRate,
VestingSchedule.size1(), VestingSchedule.size2(), Box(VestingSchedule).m, Box(out).m);
进行转换的盒子
#include <boost/numeric/ublas/matrix.hpp>
using namespace boost::numeric::ublas;
class Box {
public:
double **m;
Box(const matrix<double>& t) {
m = static_cast<double **>(malloc(static_cast<size_t>((t.size1())*sizeof(double*))));
for (size_t i = 0; i < t.size1(); i++)
m[i] = const_cast<double*>(&(t.data()[i*t.size2()]));
}
~Box() { free(static_cast<void *>(m)); }
};
我在安装程序中包含了Visual C++12.0 CRT(x64),因为这是一个VS 2013格式的64位XLL,但事实证明我还需要包含Visual C++12.0 CRT(ARM)。我欢迎任何人评论我为什么需要包括这一点。谢谢
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 将复杂的非基元C++数据类型转换为 Erlang/Elixir 格式,以使用 NIF 导出方法
- 从 cpp lib 调用函数时的数据类型转换
- 如何将两个 jlong 数据类型转换为 jstring,然后将两个字符串连接在一起以便从 JNI 将字符串返回给 jav
- pybind11:Python 到 C++ 数据类型转换不起作用
- 尝试执行绕道附加,但无法将我的lua函数的数据类型转换为LPVOID
- 使用正确的数据类型转换java中的c++方法逻辑
- 将数据类型从C#封送至C++的类型转换问题
- 使用派生模板化类的正确类型转换访问基类中的数据
- XLL由XLW制造,BOOST UBLAS MyMatrix数据类型转换为双**失败
- 将原始数据类型转换为空隙指针类型
- 为什么数据类型转换错误只出现在C++中而不出现在C中
- 正在尝试将time_t数据类型转换为(dd/mm/yyyy)格式C++
- 如何正确地对数据开始指针进行类型转换(这是一种很好的做法吗)
- C++中的类到类数据类型转换
- C++ 中的数据类型转换
- 在C++中为C库强制转换数据类型
- 为什么在初始化项列表中初始化 POD 数据时必须使用 C 样式类型转换
- 无法从一种数据类型转换为相同的数据类型?
- 我想复制 (wchar_t *) 缓冲区中的数据,但我无法这样做 bcz 还有其他不兼容的类型,类型转换但没有得到结果