我是编程新手,如果我的问题太愚蠢,请提前道歉。
我的 c++ 项目编译为库 .xll(Excel 的 DLL),框架代码(程序入口点)编码正确且工作稳定。自定义函数是单独的模块。
// header.h
typedef struct _TMDYDate {
long month;
long day;
long year;
} TMonthDayYear;
该文件funcs.c
有一个功能:
// funcs.c
#include "header.h"
__declspec(dllexport) long GetDate() {
TMonthDayYear myDate;
myDate.day = 1 ;
myDate.month = 1;
myDate.year = 2000;
if (DateToMDY(2004, &myDate) != 1) {
return 0;
}
return myDate.year;
}
该函数DateToMDY
在单独的文件中声明Dates.c
:
// dates.c
int DateToMDY (long tmpyear, TMonthDayYear *mdy) {
mdy->year = tmpyear; // <- Error is here
return 1;
}
我调试一个函数GetDate()
并在尝试通过引用 ( mdy->year = tmpyear;
) 分配值 2004 时出错。
错误是:
Unhandled exception at 0x0e342b84 (alcDates.xll) in EXCEL.EXE: 0xC0000005: Access violation writing location 0x40e3db28
有趣的是,当我将声明DateToMDY
移至文件funcs.c
时,与调用相同的地方DateToMDY
- 没有错误。
我认为这是错误的内存使用,但对我来说,隔离不同模块中的功能(例如 dates.c、array.c、sorting.c ...)至关重要。
我不知道在哪里寻找,可能是我的项目编译设置错误。