我正在使用以下命令创建 Excel 加载项XLW https://github.com/xlw/xlwGitHub 上的 Visual Studio 2022 C++ 项目。
我做了以下事情:
创建一个解决方案 MyFunction,其中包含两个项目 MyFunction 和 XLW。
在 MyFunction 中,配置属性 -> 常规 -> 配置类型设置为静态库。
在我的函数中,
my_header.h
#pragma once
double EchoDouble(double x);
my_source.cpp
#include "my_header.h"
double EchoDouble(double x)
{
return x;
}
在 XLW 中,XLW 包是通过 NuGet 包管理器安装的,并且
- 配置属性 -> 常规 -> 配置类型设置为动态库。
- 配置属性 -> C/C++ -> 其他包含目录设置为包含解决方案的文件夹。
- 配置属性 -> 链接器 -> 常规 -> 其他库目录设置为包含 MyFunction.lib 的文件夹。
- 配置属性 -> 链接器 -> 输入 -> 其他依赖项设置为 MyFunction.lib。
In XLW,
cpp接口.h
#ifndef TEST_H
#define TEST_H
#include <xlw/MyContainers.h>
#include <xlw/CellMatrix.h>
#include <xlw/DoubleOrNothing.h>
#include <xlw/ArgList.h>
using namespace xlw;
//<xlw:libraryname=MyTestLibrary
double MyEchoDouble(double x);
#endif
源代码.cpp
#include "cppinterface.h"
#include "MyFunction/my_header.h"
#pragma warning (disable : 4996)
double MyEchoDouble(double x)
{
return EchoDouble(x);
}
首先构建 MyFunction,然后构建 XLW。在 Excel 和 MyEchoDouble 中加载生成的加载项 XLW.xll。
要进行调试,我可以执行“调试”->“附加到进程”->“附加到本机代码”并选择 Excel 实例。效果很好。
或者,我做
- 配置属性 -> 调试 -> 命令设置为 EXCEL.EXE 的路径
- 配置属性 -> 调试 -> 命令参数设置为 $(TargetPath)
- 将 XLW 设置为启动项目。
按F5,我收到错误消息:
抛出异常
EXCEL.EXE 中的 0x00007FFE8496B74B 处引发异常:0xC0000005:读取位置 0x0000000000000000 时发生访问冲突。
框架不在模块中
在加载的模块中找不到当前堆栈帧。无法显示该位置的来源。
我的问题是
- 我设置项目的方式正确吗?我想要实现的是所有功能都在MyFunction项目中实现。然后在XLW项目中完成相应的Excel函数,并由XLW项目生成加载项。
- 替代调试方法出了什么问题?
谢谢你的建议。