| [ windows ] in KIDS 글 쓴 이(By): Jaedy (개같은 내 ) 날 짜 (Date): 1998년 12월 22일 화요일 오후 02시 48분 02초 제 목(Title): [급한 질문] DLL 제가 아는 사람의 부탁으로 올립니다. 해법을 아는 분들은 여기에 답변을 해 주시거나 저에게 메일을 보내 주시면 대단히 고맙겠습니다. ******************* 여기서 부터 ************************** > dll을 호출하는 sample program을 만들었는데, 30000번이상을 > 돌리면 stack overfllow가 발생하는데 이유를 아시는 분이 있을것 > 같아서 이렇게 질문을 올립니다. > main Program에서는 file에서 string을 입력받아 dll을 호출하는 쪽으로 > string을 > 넘겨줍니다. dll 쪽에서는 입력받은 string을 처리하고 결과를 main쪽으로 > 돌려주죠.. 이런 작업을 main쪽에서 30000번 이상을 했을경우 버츄얼 메모리 > 가 증가되어 stack over fllow가 나는데 이유를 아시는 분이 있을까요? > > main에서 for문을 이용하여 30000번 이상호출 > > 혹시 dll 호출방식에 문제인지... > > main쪽 부분 > ------------------------------------------------------------------------------- --- > > HINSTANCE dll; > int LoadDLL() > { > > dll = LoadLibrary( NURI); > if( dll==NULL) > { > printf("\nNURI.dll load fail\n"); > return FALSE; > } > > A1=(A_1)GetProcAddress(dll,"A1"); > A2=(A_2)GetProcAddress(dll,"A2"); > A3=(A_3GetProcAddress(dll,"A3"); > A4=(A_4)GetProcAddress(dll,"A4"); > A5=(A_5)GetProcAddress(dll,"A5"); > > return TRUE; > } > > void UnLoadDLL() > { > FreeLibrary(dll); > } > > ------------------------------------------------------------------------------- - > > load_dll.h > > ------------------------------------------------------------------------------- ----- > > typedef int (WINAPI *A_1)(char *,char *,char *); > typedef int (WINAPI *A_2)(); > typedef int (WINAPI *A_3)(unsigned char *,struct index_result[] ,int ); > > typedef int (WINAPI *A_4)(unsigned char *); > typedef int (WINAPI *A_5)(char *); > > A_1 A1; > A_2 A2; > A_3 A3; > A_4 A4; > A_5 A5; > > ------------------------------------------------------------------------------- --------------- > > export해주는 부분의 dll(NURI.dll) > > ------------------------------------------------------------------------------- ---------------- > > #ifdef WIN_NT_DLL > __declspec(dllexport)int A1(char udict[MAX_LINE], char sdict[MAX_LINE], > char xdict[MAX_LINE]); > #else > int A1(char udict[MAX_LINE], char sdict[MAX_LINE], char > xdict[MAX_LINE]); > #endif > > #ifdef WIN_NT_DLL > __declspec(dllexport)int A2(); > #else > int A2(); > #endif > > #ifdef WIN_NT_DLL > __declspec(dllexport)int A3(char config[MAX_LINE]); > #else > int A3(char config[MAX_LINE]); > #endif > > #ifdef WIN_NT_DLL > __declspec(dllexport) int A4(unsigned char *line_buffer,struct > index_result res[],int white_space) ; > #else > int A4(unsigned char *line_buffer,struct index_result res[],int > white_space); > #endif > > #ifdef WIN_NT_DLL > __declspec(dllexport)int A5(unsigned char *word); > #else > int A5(unsigned char *word); > #endif > > ------------------------------------------------------------------------------- ----------------------- 대단히 감사합니다. |