C++ 指针(结构的引用)作为函数赋值的参数
我是一个编程新手,如果我的问题太傻,我会提前道歉 < >我的C++项目被编译为Excel的库.XLL DLL,框架代码程序入口点编码正确,工作稳定。自定义函数是独立的模块C++ 指针(结构的引用)作为函数赋值的参数,c++,pointers,structure,arguments,assign,C++,Pointers,Structure,Arguments,Assign,我是一个编程新手,如果我的问题太傻,我会提前道歉 < >我的C++项目被编译为Excel的库.XLL DLL,框架代码程序入口点编码正确,工作稳定。自定义函数是独立的模块 // header.h typedef struct _TMDYDate { long month; long day; long year; } TMonthDayYear; 文件funcs.c有一个函数: // funcs.c #include "header.h" __declspec(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中声明:
有趣的是,当我将DateToMDY的声明移动到funcs.c文件中时,调用DateToMDY的地方也一样——没有错误
我认为这是因为内存使用错误,但对我来说,隔离不同模块中的功能是至关重要的,例如dates.c、array.c、sorting.c
我不知道在哪里查找,可能是我有错误的项目编译设置。您似乎从一个不可见其声明的位置调用了该函数。如果您这样做,则编译程序不知道参数应该具有什么类型,因此它会将它们全部作为int传递
从另一个.c文件调用的函数应该在相应的.h文件中声明,并包含在使用该函数的所有.c文件中。我认为从函数声明不可见的地方调用函数是不可能的。这样的代码是不可能的compiled@Anton:如果使用旧的C语言规则,实际上可以。最初你不必声明参数或返回值,只要它们都是int类型。如果你在许可模式下运行你的C编译器,这仍然有效。非常有趣的是,我不知道这种可能性,如果不是结构类型,我传递普通类型,如long或double,那么另一个.C文件中的函数工作正常
// dates.c
int DateToMDY (long tmpyear, TMonthDayYear *mdy) {
mdy->year = tmpyear; // <- Error is here
return 1;
}
Unhandled exception at 0x0e342b84 (alcDates.xll) in EXCEL.EXE: 0xC0000005: Access violation writing location 0x40e3db28