1
如果我的問題太愚蠢,我是編程中的新手,並提前道歉。我的C++項目編譯爲庫.xll(DLL for 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
被稱爲 - 沒有錯誤。
我認爲這是錯誤的內存使用情況,但對於我來說,隔離不同模塊中的功能(例如dates.c,array.c,sorting.c ...)至關重要。
我不知道在哪裏尋找,可能是我有錯誤的項目編譯設置。
我認爲它不可能從函數聲明不可見的地方調用函數。這樣的代碼不能編譯 – 2011-02-26 11:38:51
@Anton:如果你使用舊的C語言規則,你實際上可以。最初,您不必聲明參數或返回值,只要它們都是int類型即可。如果您以寬容模式運行C編譯器,那仍然有效。 – 2011-02-26 11:47:38
它非常有趣我不知道這種可能性 – 2011-02-26 12:20:00