קריאה לתוכנית

mich

New member
קריאה לתוכנית

שלום איך אני קוראת מתוכנית שאני כתבתי בMFC לתוכנית אחרת. תודה מיכל
 

galh

New member
תתחיל לרוץ

אם את מתכוונת להריץ תוכנית אחרת מתוך תוכנית שאת כתבת אז יש את פונקצית ה- API בשם CreateProcess. יש לה אומנם המון פרמטרים אבל צריך להשתמש בה ולא ב- WinExec שקיימת רק בשביל תאימות עם חלונות גרסא 3.1 (16 סיביות). אם לא, תנסחי את שאלתך שוב.
 

mich

New member
עוד משהו קטן

הי יש אפשרות לעשות את זה modelles? תודה מיכל
 

galh

New member
אה?

אני תמיד מתבלבל בין Modal ל- Modaless. לגבי תשובה, קריאה ל- CreateProcess מריצה תהליך _במקביל_ לריצה של התוכנית שלך. אם את רוצה לחכות שאותו תהליך יסתיים ולא להמשיך להריץ את התוכנית הראשית אז את צריכה לקרוא ל- WaitForSingleObject( pi.hProcess, INFINITE ); כאשר pi הוא ה- PROCESS_INFORMATION שהעברת כפרמטר. אם לא הבנתי אותך או שכל התשובה שלי לא נכונה, נסי למצוא את התיעוד של הפקודה ב- MSDN.
 

mich

New member
ועוד משהו...

הי אני יודעת שאני מתחילה כבר להעיק, אבל אני בלחץ מטורף של זמן, אז במקביל לחיפושים שלי אני אשאל גם כאן: מה זה ה PROCESS_INFORMATION תודה מיכל
 

galh

New member
תדעי שאת מעיקה שאני אפסיק לענות ../images/Emo13.gif

ה- PROCESS_INFORMATION הוא מבנה נתונים שמכיל מידע על התהליך החדש שנוצר. המידע הזה מאפשר לך "לדבר" עם אותו תהליך שנוצר מתוך התהליך שיצר אותו. מי שממלא את מבנה הנתונים הזה הוא הפונקציה CreateProcess.
 

mich

New member
בטח תענה לי רק מחר, אם בכלל ../images/Emo13.gif

אבל, אני חושבת שאני עושה נכון PROCESS_INFORMATION pi; CreateProcess("myProg.exe", NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, &pi); ובכל זאת אני מקבלת הודעת שגיאה: unhandled exception in proj.exe (NTDLL.DLL): 0xc0000005: access vaiulation יכול לעזור? ושוב תודה
 

galh

New member
לפי השעה, אני עונה באותו יום. ../images/Emo13.gif

נראה שהפרמטרים שלך קצת לא לפי התיעוד, וחסר את ה- STARTUPINFO. הנה דוגמא שהוצאתי מה- MSDN:
<pre> void main( VOID ) { STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( &pi, sizeof(pi) ); // Start the child process. if( !CreateProcess( NULL, // No module name (use command line). "MyChildProcess", // Command line. NULL, // Process handle not inheritable. NULL, // Thread handle not inheritable. FALSE, // Set handle inheritance to FALSE. 0, // No creation flags. NULL, // Use parent´s environment block. NULL, // Use parent´s starting directory. &si, // Pointer to STARTUPINFO structure. &pi ) // Pointer to PROCESS_INFORMATION structure. ) { ErrorExit( "CreateProcess failed." ); } // Wait until child process exits. WaitForSingleObject( pi.hProcess, INFINITE ); // Close process and thread handles. CloseHandle( pi.hProcess ); CloseHandle( pi.hThread ); } </pre>​
 

ihovav

New member
סתם עצה ידידותית

תנסי להעזר יותר ב MSDN - זה כלי שיכול לפתור לך המון בעיות אם תלמדי להשתמש בו כמו שצריך חבל שבשביל כל שאלה את צריכה לחכות לתשובה פה בפורום - זה גוזל לך זמן...
 

mich

New member
תודה...

היי תודה על העצה, אבל בדר"כ אני עושה את זה במקביל, בודקת בMSDN ושואלת בפורום, והראשון שאני מצליחה להבין מנצח
אבל לפעמים אין לי ממש מושג איזה פקודה לחפש כמו במקרה של הmodeless ואז בMSDN זה יכול לקחת שעות כי לא ידעתי מה הפקודה שאני מחפשת. זהו תודה מיכל
 

mich

New member
אני לא אטריד יותר

הי אני מבטיחה שאני לא אטריד יותר, זהו, סיימתי את הפרוייקט שלי, רץ או לא רץ, אני צריכה להגיש ביום ראשון. לא נעים לי אבל הסתדרתי עם הבלאגן, ככה זה שעובדים כל הלילה. תודה על הכל מיכל
 

galh

New member
לשאול זה לא להטריד.

לי זה עושה הרגשה טובה לעזור לאנשים (בנוסף להרגשה של "אני יודע והוא לא.."
), כך שההצהרה שלך קצת מדכאת...
 
למעלה