ಒಂದು ಕ್ಯಾಸ್ಟ್ ತೋರಿಕೆಯಲ್ಲಿ ಸಾಮಾನ್ಯ ಪ್ರಾಕ್ಸಿ ಸೆಟ್ಟಿಂಗ್‌ಗಳ ಸಹಾಯಕವನ್ನು ಆರ್ಕಿಟೆಕ್ಚರ್ ಅವಲಂಬಿತ ವೈಫಲ್ಯವಾಗಿ ಪರಿವರ್ತಿಸಬಹುದು:

current = (IntPtr)((int)current + optionSize);

ಆ ಕೋಡ್ ಮುಂದಿನ ರಚನೆಯ ಗಾತ್ರವನ್ನು ಸೇರಿಸುವ ಮೊದಲು ಸ್ಥಳೀಯ ವಿಳಾಸವನ್ನು 32-ಬಿಟ್ ಪೂರ್ಣಾಂಕಕ್ಕೆ ಕಿರಿದಾಗಿಸುತ್ತದೆ. 64-ಬಿಟ್ ಪ್ರಕ್ರಿಯೆಯು ಹೊಂದಿಕೊಳ್ಳದ ವಿಳಾಸಗಳನ್ನು ಹಿಡಿದಿಡಬಹುದು. ಪರಿವರ್ತನೆ ಮತ್ತು ಮೌಲ್ಯವನ್ನು ಅವಲಂಬಿಸಿ ಫಲಿತಾಂಶವು ಓವರ್‌ಫ್ಲೋ ಎಕ್ಸೆಪ್ಶನ್ ಅಥವಾ ಅಮಾನ್ಯ ವಿಳಾಸವಾಗಿರಬಹುದು. ಬಿಲ್ಡ್ ಅನ್ನು x86 ಗೆ ಹಿಂತಿರುಗಿಸುವುದು ತಪ್ಪನ್ನು ಮರೆಮಾಡಬಹುದು, ಆದರೆ interop ಅನುಷ್ಠಾನವನ್ನು ಆ ಪರಿಹಾರದ ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿ ಬಿಡುತ್ತದೆ.

ವಿಳಾಸಗಳನ್ನು ಪಾಯಿಂಟರ್-ಗಾತ್ರ ರೂಪದಲ್ಲಿ ಇರಿಸಿ. ಉದಾಹರಣೆಗೆ, ಈಗಾಗಲೇ ಹಂಚಿಕೆ ಮಾಡಿದ ಸರಣಿಯ ಮೂಲಕ ಸಾಗಲು ಇದನ್ನು ಬಳಸಬಹುದು:

IntPtr item = IntPtr.Add(buffer, checked(index * optionSize));

ಆಫ್‌ಸೆಟ್ ಪೂರ್ಣಾಂಕವಾಗಿ ಉಳಿಯುತ್ತದೆ; ವಿಳಾಸವೇ ಅದರ ಮೂಲಕ ಸ್ಕ್ವೀಝ್ ಆಗುವುದಿಲ್ಲ. ಹಂಚಿಕೆ ಗಾತ್ರ ಮತ್ತು ಸೂಚ್ಯಂಕ ಇನ್ನೂ ಮಾನ್ಯವಾಗಿರಬೇಕು.

ನಂತರ ಸುತ್ತಮುತ್ತಲಿನ ಘೋಷಣೆಗಳನ್ನು ಪರಿಶೀಲಿಸಿ

WinINet ನ ಪ್ರತಿ-ಸಂಪರ್ಕ ಆಯ್ಕೆಗಳು DWORD, ಸ್ಟ್ರಿಂಗ್ ಪಾಯಿಂಟರ್ ಮತ್ತು FILETIME ಅನ್ನು ಸದಸ್ಯರಾಗಿ ಒಳಗೊಂಡ ಒಂದು ಒಕ್ಕೂಟವನ್ನು ಹೊಂದಿವೆ. ಪಾಯಿಂಟರ್ ಕ್ಷೇತ್ರಗಳಿಗೆ IntPtr ಬೇಕು; DWORD ಕ್ಷೇತ್ರಗಳು 32-ಬಿಟ್ ಆಗಿ ಉಳಿಯುತ್ತವೆ. ಸ್ಥಳೀಯ ಜೋಡಣೆ ಮುಖ್ಯ, ಆದ್ದರಿಂದ ಪ್ರತಿ ಪೂರ್ಣಾಂಕವನ್ನು 64-ಬಿಟ್ ಪೂರ್ಣಾಂಕದಿಂದ ಬದಲಾಯಿಸುವುದು ಅಥವಾ ಪ್ಯಾಕ್ ಮಾಡಿದ ವಿನ್ಯಾಸವನ್ನು ಒತ್ತಾಯಿಸುವುದು ಸರಿಯಾದ ದುರಸ್ತಿ ಅಲ್ಲ.

ಸರಣಿಯ ಮೂಲಕ ಸಾಗುವಾಗ marshaling ನಂತರದ ರಚನೆ ಗಾತ್ರವನ್ನು ಬಳಸಿ, ANSI ಅಥವಾ Unicode ಘೋಷಣೆಯನ್ನು ಸ್ಥಿರವಾಗಿ ಹೊಂದಿಸಿ ಮತ್ತು ಪ್ರತಿ ಹಂಚಿಕೆಯನ್ನು ಪ್ರತ್ಯೇಕವಾಗಿ ಟ್ರ್ಯಾಕ್ ಮಾಡಿ. ಆಯ್ಕೆ ರಚನೆಗಳ ಬ್ಲಾಕ್ ಅನ್ನು ಬಿಡುಗಡೆ ಮಾಡುವುದು ಬೇರೆಡೆ ಹಂಚಿಕೆ ಮಾಡಿದ ಮತ್ತು ಆ ರಚನೆಗಳು ಉಲ್ಲೇಖಿಸುವ ಸ್ಟ್ರಿಂಗ್‌ಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಬಿಡುಗಡೆ ಮಾಡುವುದಿಲ್ಲ.

ಕೊನೆಯದಾಗಿ, ಸೆಟ್ಟಿಂಗ್‌ಗಳ ವ್ಯಾಪ್ತಿಯ ಪ್ರಶ್ನೆಯನ್ನು ಮೆಮೊರಿ ಸರಿಯಾಗಿರುವಿಕೆಯಿಂದ ಪ್ರತ್ಯೇಕವಾಗಿ ಇರಿಸಿ. ಕ್ಯಾಸ್ಟ್ ಸರಿಪಡಿಸುವುದು ಸಹಾಯಕ ಆಯ್ಕೆ ಮಾಡಿದ WinINet ಆಯ್ಕೆಯು ಒಂದು ನಿಯಂತ್ರಣ, ಒಂದು ಪ್ರಕ್ರಿಯೆ ಅಥವಾ ಪ್ರಸ್ತುತ ಬಳಕೆದಾರರ ಸೆಟ್ಟಿಂಗ್‌ಗಳ ಮೇಲೆ ಮಾತ್ರ ಪರಿಣಾಮ ಬೀರುತ್ತದೆ ಎಂದು ಸಾಬೀತುಪಡಿಸುವುದಿಲ್ಲ. ಹಳೆಯ ಮಾದರಿಯ ಉಳಿದ ಭಾಗವನ್ನು ಅಳವಡಿಸಿಕೊಳ್ಳುವ ಮೊದಲು ಆ API ನಡವಳಿಕೆಯನ್ನು ಪರಿಶೀಲಿಸಿ. ಅದು ರಿಫ್ರೆಶ್ ಅಧಿಸೂಚನೆಗಳನ್ನೂ ಕಳುಹಿಸಿದರೆ, ಉದ್ದೇಶಿತ ವ್ಯಾಪ್ತಿಗೆ ಅವುಗಳನ್ನು ಆಯ್ಕೆ ಮಾಡಿ.

ಸಂಬಂಧಿತ ಲೇಖನಗಳು