שאלה

eli55m

New member
שאלה

אני צריך לבנות dll בVC שאמור לשלוח נתונים שמתעדכנים כל הזמן את נתונים אני אמור לקבל ב - VB מה הדרך הכי מהירה לעשות זאת ? ואיך ניתן לעשות זאת ? אני חשבתי על שליחת הודעה מVC עם postmessage אך אנני יודע איך לבצע את הצד של VB .
 

DarkSwell

New member
תשובה..

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

eli55m

New member
כן אבל ....

השאלה אם יגיעו הרבה נתונים לdll בVC ואני לא יספיק לקרוא אותם מ VB יכול לקרוא מצב שאני יאבד נתונים יש לך דרך אחרת?
 

DarkSwell

New member
אולי..

הצד שמספק את הנתונים יצור קבצים של נתונים פותח קובץ בשם buffering נאמר שכל קובץ יהיה בגודל מקסימלי של 1K אז לאחר שסיים לכתוב קובץ אחד הוא משנה את שמו ל f1 ומתחיל ליצור שוב את הבא בתור בשם buffering וכשסיים משנה את שמו ל f2 וכך הלאה.. הצד המקבל אמור לחפש את קובצי ה fX לפי הסדר, לאחר שסיים לקרוא שימחק את אותו קובץ ויעבור לקובץ הבא במידה ויש מוכן.
 

gilad_no

New member
תלוי ביישום שלך

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

eli55m

New member
איך משתמשים ב...

פתרון הקבצים לא טוב בשבלי מכוון שלקוח אמור לקבל את ה DLL והוא אמור להתממשק אליו מVB לכן זה לא יהיה נוח לנהל את זה עם קבצים. השאלה שלי אם יש אפשרות כשה DLL מקבל את הנתונים אני יקבל אירוע בVB לנתון החדש. אני לא מכיר את --מה שהצעת בWM_COPYDATA,בNAMED PIPES יש לך דוגמא
 

gilad_no

New member
תפרט יותר

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

eli55m

New member
בסדר הפתרון הזה נראה טוב

מטרת הפרוייקט הוא : יהיה לי תוכנית שתרוץ במחשב מרוחק (server) שהוא ישלח נתונים ב TCP/IP לclient .(עד לחלק הזה אני יודע לעשות,שכל זה כתוב בVC). חלק שני אותו client (שיהיה כתוב בVC )אמור להעביר את הנתונים שהיגעו מה SERVER לאפליקציה של VB. עכשיו אין לי COM או משהו אחר העיקר שיהיה לי פתרון. איך אני יורה ארוע לVB ? אם יש לך דוגמא של COM שיורה ארוע לVB שלח לי אותו בבקשה
 

ברנדל

New member
יש לך messenger מותקן?

אם כן תפנה אלי, אולי בשיחה ולא בטלפון שבור נצליח (פשוט אני כבר מכיר את הענינים האלה)
 

gilad_no

New member
שאלה:

הקליינט (בVC) והיישום (בVB) הם 2 יישומים נפרדים? אם כן, תשתמש בWM_COPYDATA, זה יהיה הכי פשוט. היישום בVB ייצור חלון היישום בVC יימצא את החלון הנ"ל (עם FindWindow) ויישלח אליו את ההודעה עם WM_COPYDATA.
 

eli55m

New member
ok זה נראה פתרון טוב

כן הקליינט (בVC) והיישום (בVB) הם 2 יישומים נפרדים זה בדיוק מה שרציתי שקליינט (בVC) ישלח הודעה לVB . אבל שאלת השאלות שלי היא איך אני כותב את הצד של הVB כאשר אני מבצע SendMessage מ VC, איך בVB אני מקבל את האירוע הזה?????
 

ברנדל

New member
אבל שלחתי לך קוד

מה הבעיה??? תסתכל אתה יכול במה ששלחתי לך לקבל את כל ההודעות + הודעות שאתה מגדיר. אין עם זה שום בעיה? מה בקוד ששלחתי לך לא הלך??? תסביר!
 

ברנדל

New member
קבל שוב

תריץ את זה, ושים לב שאתה יכול להוסיף איזה msg שבא לך תמצא את החלון של form1 מה vc ותשלח הודעות
 

eli55m

New member
בסדר אני ינסה שוב

נסיתי לשלוח את ה handle של form1 ולא קיבלתי שום הודעה
 

ברנדל

New member
אבל אתה חייה להגדיר את ההודעה ב vb

כלומר, אם ההודעה שלך ב vc זה: WM_USER + 5 והערך הזה שווה ל 205 נניח, אז אתה חייה להגדיר define בקוד של ה vb עם 205, בדיוק כמו שבקוד הוגדרו כל יתר ההודעות. תראה זה חייב להצליח, תבדוק את עצמך טוב. אם לא ילך אני אבנה לך קוד של שליחה וקבלה. אבל אין סיבה שלא ילך
 

ברנדל

New member
זהו אני סוגר לך את הענין סופית

יש לך קוד הכי מצומצם ב vb (מקבל רק את ההודעה שלך) + קוד שליחת ההודעה מה VC. בנוסף שני exe : של vb ושל vc שהקוד הנ"ל מפיק: אתה לוחץ על כפתור ב vc והודעה קופצת לך ב vb.
 

DarkSwell

New member
תשובה בפעם השניה!

ישנה פונקצית API בשם SetWindowsHookEx שמשויכת לקובץ user32.dll הפונקציה מקבלת 4 פרמטרים, 1) סוג קוד האירוע אשר עבורו תזומן הפרוצדורה "המאזינה". 2) כתובת של הפרוצדורה שתזומן, במידה והפרוצדורה לא שיכת לאותו קוד כלומר במיקרה שלך, אז יש לתת כתובת של פרוצדורה שכלולה בקובץ dll מוכר. 3) מזהה של קובץ ה dll אשר בו כלולה הפרוצדורה. 4) מזהה של ה thread עבורו תזומן הפרוצדורה שהוגדרה בפרמטר 2 ו 3, עבור האירוע שהוגדר בפרמטר 1, במיקרה שלך ה thread של התוכנית VC. זה הכל. ביי.
 
למעלה