בית
Top.Mail.Ru Yandeks.Metrika
פורום: "עלוב";
ארכיון נוכחי: 2004.12.12;
הורדה: [xml.tar.bz2];

למטה

למה אני צריך Set8087CW לאחר שיחות פונקציות WinApi? מצא סניפים דומים


Piter ©   (2004-11-21 17:04) [0]

מה הטעם בקוד זה:

function CreateWindowEx(dwExStyle: DWORD; lpClassName: PChar;
 lpWindowName: PChar; dwStyle: DWORD; X, Y, nWidth, nHeight: Integer;
 hWndParent: HWND; hMenu: HMENU; hInstance: HINST; lpParam: Pointer): HWND;
var
 FPUCW: Word;
begin
 FPUCW := Get8087CW;
 Result := _CreateWindowEx(dwExStyle, lpClassName, lpWindowName, dwStyle,
   X, Y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam);
 Set8087CW(FPUCW);
end;


האם CreateWindowEx מכה את ההגדרות?

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

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

ולמה בכלל להחזיר את הדיוק, האם זה קריטי?



Anatoly Podgoretsky ©   (2004-11-21 17:09) [1]

דגלי המעבד המשותף מתוארים בתיעוד על מעבדי אינטל, בפרט על משפחת x86, בחלקם יש מידע במקורות ה- VCL



Piter ©   (2004-11-21 17:48) [2]

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



Anatoly Podgoretsky ©   (2004-11-21 17:55) [3]

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



GuAV ©   (2004-11-21 18:34) [4]

Piter © (21.11.04 17: 04)
נניח שיש לנו מספר נקודה צפה של 8 בתים, למשל כפול. טווח המספרים האפשריים ודיוק הייצוג שלהם כבר נובע מממדו. האין זה כך?

אז עם זאת, זה היה על דיוק המצגת. באשר לדיוק החישוב, זה לא תלוי בסוג אלא ב- 87CW זה

Piter © (21.11.04 17: 04)
כיצד משפיע Set8087CW אז

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

אם אינך מעוניין לצפות במעגן במעבדים, Set8087CW + F1 + ראה גם

קרא גם: http://www.delphikingdom.com/asp/viewitem.asp?catalogid=374



Piter ©   (2004-11-21 18:52) [5]

ובכן, את העובדה שהיא משתנה, כבר ניחשתי.

השאלות הן:

1) מדוע זה קריטי ששינוי מילת השליטה?

2) האם זה רק באג של חלונות שכאשר קוראים ל- CreateWindow מילת הבקרה משתנה?
או מדוע זה הכרחי?

3) האם אנו יכולים לתת דוגמא כאשר התוצאה של משהו תלויה בהגדרות של מילת השליטה?



Anatoly Podgoretsky ©   (2004-11-21 18:54) [6]

Piter © (21.11.04 18: 52) [5]
1. יהיו תוצאות שגויות אם מילת הבקרה אינה נכונה
2. אין באג, בורלנד עצמו גם משנה אותו פעמים רבות
3. למשל עגול



GuAV ©   (2004-11-21 19:02) [7]

Piter © (21.11.04 18: 52) [5]
3) האם אנו יכולים לתת דוגמא כאשר התוצאה של משהו תלויה בהגדרות של מילת השליטה?

X := 0;
Result := 1/X;



Piter ©   (2004-11-21 19:11) [8]

© גנוב (21.11.04 18: 34) [4]
אז עם זאת זה היה על דיוק הייצוג. לגבי דיוק


ועוד:

© גנוב (21.11.04 18: 34) [4]
משפיע על הדיוק של המצגת


אז האם זה משפיע על הדיוק של המצגת או לא?

באשר לגילויים, האם לא ברור לבצע אותם ברמת הדיוק הגבוהה ביותר?



Anatoly Podgoretsky ©   (2004-11-21 19:13) [9]

ובכן, סוף סוף אתה מסתכל על הוראות המעבד, זה מייד מסיר את כל השאלות.



Anatoly Podgoretsky ©   (2004-11-21 19:14) [10]

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



Piter ©   (2004-11-21 19:18) [11]

אין באג, בורלנד עצמו גם משנה אותו פעמים רבות

ובכן, אולי זה המקום שאתה צריך. אבל מדוע לשנות פרמטר זה של הפונקציה CreateWindowEx ?! כל אלה לאורך הדרך הם באג ...



Anatoly Podgoretsky ©   (2004-11-21 19:19) [12]

Piter © (21.11.04 19: 18) [11]
לשם כך, עיין בקוד המקור של CreateWindowEx, אך הם אינם זמינים.



GuAV ©   (2004-11-21 19:19) [13]

Piter © (21.11.04 19: 11) [8]
ועוד:

© גנוב (21.11.04 18: 34) [4]
משפיע על הדיוק של המצגת

חישוב כמובן.

Piter © (21.11.04 19: 11) [8]
זה לא מובן מאליו לבצע אותם ברמת הדיוק הגבוהה ביותר?

לא.



Игорь Шевченко ©   (2004-11-21 19:31) [14]

פיטר © (21.11.04 17: 04)

ואם זה לא סוד, איפה מצאת קוד כזה?



GuAV ©   (2004-11-21 19:39) [15]

איגור שבצ'נקו © (21.11.04 19: 31) [14]
CreateWindowEx


windows.pas



Piter ©   (2004-11-21 19:42) [16]

Anatoly Podgoretsky © (21.11.04 19: 13) [9]
ובכן, סוף סוף, עיין בהוראות המעבד


איפה אראה אותה?



Piter ©   (2004-11-21 19:45) [17]

איגור שבצ'נקו © (21.11.04 19: 31) [14]
ואם זה לא סוד, איפה מצאת קוד כזה?


GUAV ב- [15] השיב. יתר על כן, קוד זה משמש למעשה. לדוגמא:

procedure TCustomForm.CreateWnd;
...
FClientHandle := Windows.CreateWindowEx
...


נראה כי יישום זה מוצג במיוחד כדי למנוע איזושהי תקלה של חלונות, בה משתנה מילת השליטה. אבל איך זה משתנה ואיך התוכנית עובדת?



Anatoly Podgoretsky ©   (2004-11-21 19:47) [18]

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



Игорь Шевченко ©   (2004-11-21 19:50) [19]

© גנוב (21.11.04 19: 39) [15]

אני כנראה עיוור. ל- D6 אין את זה, אך חלונות נוצרים ללא בעיות.



GuAV ©   (2004-11-21 19:56) [20]

איגור שבצ'נקו © (21.11.04 19: 50) [19]
ב- D6 אין דבר כזה


אולי ב- D6 אינו קיים, אך ב- D7 הוא.

איגור שבצ'נקו © (21.11.04 19: 50) [19]
חלונות נוצרים ללא בעיות.

לא יהיו בעיות בעת יצירת חלונות.
עם זאת, ניתן לשנות את Word בקרת מעבד לאחר פונקציה זו.
ב win2k, סביר להניח שזה לא יתבטא, ככל הנראה מ- 9x.



Piter ©   (2004-11-21 20:17) [21]

איגור שבצ'נקו © (21.11.04 19: 50) [19]

יש לי D7. ואיך נראית השיחה:

הליך TCustomForm.CreateWnd;
...
FClientHandle: = Windows.CreateWindowEx
...


מה במקום Windows.CreateWindowEx? פשוט CreateWindowEx?



Игорь Шевченко ©   (2004-11-21 20:19) [22]

Piter © (21.11.04 20: 17) [21]

FClientHandle: = Windows.CreateWindowEx ...

© גנוב (21.11.04 19: 56) [20]


> עם זאת, ניתן לשנות את מילת בקרת המעבד לאחר
> פונקציה זו


בהתבסס על איזו מסקנה כזו?



Anatoly Podgoretsky ©   (2004-11-21 20:22) [23]

איגור שבצ'נקו © (21.11.04 20: 19) [22]
חלק מהפונקציות של Windows משנות את מילת השליטה, זה נחשב בכנסים של בורלנד. ככל הנראה לאחר מכן, הציל הופיע.



GuAV ©   (2004-11-21 20:55) [24]

procedure TForm1.Button1Click(Sender: TObject);
var CW1, CW2: Word;
begin
  Set8087CW($1372); // any control word
  CW1 := Get8087CW;
  DestroyWindow(_CreateWindowEx(WS_EX_TOOLWINDOW, "STATIC", "",WS_POPUP,
    0, 0, 0, 0, 0, 0, SysInit.HInstance, nil));
  CW2 := Get8087CW;
  ShowMessageFmt("%.4X  %.4x", [CW1, CW2]);
end;


קוד זה ב- 98se מראה ש- Word מעבד בקרת מעבד אינו משתנה. הבעיה קיימת ככל הנראה בגירסאות קודמות של Windows. המסקנה נעשית על בסיס שמירת CW ב- D7.



Piter ©   (2004-11-21 21:42) [25]

איגור שבצ'נקו © (21.11.04 20: 19) [22]
FClientHandle: = Windows.CreateWindowEx ...


ומה קוד הפונקציה: Windows.CreateWindowEx?



Игорь Шевченко ©   (2004-11-21 22:16) [26]

Piter © (21.11.04 21: 42) [25]

פונקציה CreateWindowEx; משתמש חיצוני32 שם "CreateWindowExA";



Piter ©   (2004-11-22 00:45) [27]

איגור שבצ'נקו © (21.11.04 22: 16) [26]

זה ברור. אז ב- D7 הם השתנו ...



עמודים: 1 ענף שלם

פורום: "עלוב";
ארכיון נוכחי: 2004.12.12;
הורדה: [xml.tar.bz2];

למעלה





זיכרון: 0.65 MB
זמן: 0.07 c
14-1101306416
אֵירוֹפִּי
2004-11-24 17:26
2004.12.12
CVS ו- WinCVS


3-1100503339
snake1977
2004-11-15 10:22
2004.12.12
איחוד עבור כינוי סטנדרטי


1-1101636741
בובי דיגיטלי
2004-11-28 13:12
2004.12.12
פריט


1-1101732768
Dmitry_04
2004-11-29 15:52
2004.12.12
כיצד לבדוק את התוכנית שלך עבור באגים?


3-1099486752
Maknik
2004-11-03 15:59
2004.12.12
dxDBGrid והרמז





אפריקאנס אלבני ערבי אַרְמֶנִי אזרביג'אן הבסקים בלארוסית בולגרי קטלאנית הסיני (פשוט) סינית (מסורתית) קרואטית צ'כיה דני הולנדי אנגלית אסטוני פיליפיני פיני צרפתית
גליציה גאורגיה גרמני יווני קריאולית האיטית עברי הינדי הונגרי איסלנדי אינדונזי אירי איטלקי יפני קוריאני לטבי ליטאי מקדוניה מלאית מלטזית נורבגי
פרסי פולני פורטוגזי רומנית רוסי סרבית סלובקי סלובני ספרדי סוואהילית שבדי תאילנדי תורכי אוקראיני אורדו ויאטנמית וולשית יידיש בנגלית בוסנית
קבואנו אספרנטו גוג'ראטית האוסה המונג איגבו יָאוָנִי קנאדה לחמר לאו הלטינית מאורים מרתי מונגולי נפאלית פונג'בית סומליה טמילית טלוגו יורובה
זולו
Английский Французский Немецкий Итальянский Португальский Русский Испанский