如何在dll中寫一個class來export |
尚未結案
|
Fm
初階會員 發表:19 回覆:66 積分:37 註冊:2003-10-15 發送簡訊給我 |
大家好
當我用呼叫寫好在Dll中的MessageBox,便會出現Access vilation的錯誤訊息
不知道是那邊錯,,,不吝賜教.
我的程式如下
#DemoMCDll.h //-------- #define DemoMCDLL_EXPORTS //------ #ifdef DemoMCDLL_EXPORTS #define DemoMCDLL_API __declspec(dllexport) #else #define DemoMCDLL_API __declspec(dllimport) #endif #ifdef __cplusplus extern "C" { #endif DemoMCDLL_API void beep(WORD wCounter); #ifdef __cplusplus } #endif //--------------------------------------------------------------------------- class DemoMCDLL_API CDemoDll { public: CDemoDll(char*); ~CDemoDll(); //-------- void MCMsg(void); char *Msg; }; DemoMCDll.cpp //-------Dll建立 /-------------------------------------------------------------------- #include//-------------------- Begin with the end in mind. |
allenchan
資深會員 發表:10 回覆:306 積分:283 註冊:2004-01-06 發送簡訊給我 |
|
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
|
Fm
初階會員 發表:19 回覆:66 積分:37 註冊:2003-10-15 發送簡訊給我 |
|
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
Fm你好:
這個bug關連不少議題:pointer,string,new,delete。我就我所能的解釋,如果不清楚的地方就請你再提出來吧~ 先由你原來的函式說起:
< class="code">
CDemoDll::CDemoDll(char* msg)
{
Msg=NULL;
Msg=new char[255];
Msg=msg;
}
char* Msg是一個指標。在windows系統下,這個指標實際上是一個4 byte的變數,記錄著一個地址。(你可以把他想像成住家的住址) Msg = new char[255];
上面的程式碼向系統要了一塊記憶體(想像成房子),並且回傳了地址給Msg。 Msg = msg
上面的程式碼把msg的地址指派給了Msg。 這時你應該可以發現,之前要來的"房子"的_地址_已經不見了,msg和Msg都是記錄著同一個地址。而msg和Msg記錄的地址是指向Button1Click裡面的"Hello World"。 這時bug已經產生,不過還沒真正出問題。直到... delete [] Msg;
這時你還回去的房子是Button1Click裡的"Hello World",而不是之前配給你的房子(地址早就不見了...)。於是bug引爆.... 其實你要做到的功能是:向系統要個房子,並且把房子裝成和"Hello World"一樣。strcpy正是針對字串做這類的事:傳給他兩個地址,他就把兩個地址指向的房子弄成一樣,於是這就解決你的問題。 不知道這麼解說是否清楚?
|
Fm
初階會員 發表:19 回覆:66 積分:37 註冊:2003-10-15 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |