Я новичок в программировании и заранее прошу прощения, если мой вопрос слишком глуп.
Мой проект на c ++ скомпилирован как библиотека .xll (DLL для Excel), код структуры (точка входа в программу) закодирован правильно и работает стабильно. Пользовательские функции - это отдельные модули.
// 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
- ошибки нет.
Я предполагаю, что это неправильное использование памяти, но для меня крайне важно изолировать функциональность в разных модулях (например, date.c, array.c, sorting.c ...).
Я не знаю, где искать, возможно, у меня неправильные настройки компиляции проекта.