Ìdí tí olùrànlọ́wọ́ WinINet proxy àtijọ́ fi ń fọ́ nínú 64-bit build
Dá àpèjúwe pípa pointer mọ̀ nínú àwọn àpẹẹrẹ C# proxy interop kí o sì yẹ̀wò ìtòlẹ́sẹẹsẹ ìgbékalẹ̀ àti ìní ìrántí kí o tó tún lò wọ́n.
Cast kan lè yí olùrànlọ́wọ́ ètò proxy tí ó dàbí ojoojúmọ́ padà sí àṣìṣe tí ó gbára lé ìkọ́lé:
current = (IntPtr)((int)current + optionSize);
Kóòdù yẹn dín àdírẹ́sì ìbílẹ̀ kù sí nọ́mbà 32-bit kí ó tó fi ìwọ̀n ìgbékalẹ̀ tó kàn kún un. Ìlànà 64-bit lè di àwọn àdírẹ́sì tí kò wọ inú rẹ̀ mọ́. Ní ìbámu pẹ̀lú ìyípadà àti iye, àbájáde lè jẹ́ ìyọkùn ìṣànjáde tàbí àdírẹ́sì tí kò tọ́. Pípadà build padà sí x86 lè fi àṣìṣe pamọ́, ṣùgbọ́n ó fi ìmúṣẹ interop sí ìgbẹ́kẹ̀lé ọ̀nà àbáyọ yẹn.
Pa àwọn àdírẹ́sì mọ́ ní ìrísí ìwọ̀n pointer. Fún àpẹẹrẹ, láti rìn gba inú àkójọ tí a ti yà sọ́tọ̀ lè lò:
IntPtr item = IntPtr.Add(buffer, checked(index * optionSize));
Ìpadà náà wà ní nọ́mbà gbígbé; àdírẹ́sì fúnra rẹ̀ kò fún pẹ̀lú ọ̀kan. Ìwọ̀n ìpín àti atọ́ka ṣì gbọ́dọ̀ wà ní ẹ̀tọ́.
Lẹ́yìn náà yẹ̀wò àwọn ìkéde tí ó yí i ká
Àwọn àṣàyàn WinINet fún ìsopọ̀ kọ̀ọ̀kan ní ìsopọ̀ kan tí àwọn ọmọ ẹgbẹ́ rẹ̀ ní DWORD, pointer okùn àti FILETIME. Àwọn pápá pointer nílò IntPtr; àwọn pápá DWORD wà ní 32-bit. Ìtòlẹ́sẹẹsẹ ìbílẹ̀ ṣe pàtàkì, nítorí náà pípààrọ̀ gbogbo nọ́mbà gbígbé pẹ̀lú nọ́mbà 64-bit tàbí fífi ìtòlẹ́sẹẹsẹ tí a kó sínú mú kò jẹ́ àtúnṣe tí ó tọ́.
Lo ìwọ̀n ìgbékalẹ̀ lẹ́yìn marshaling nígbà tí o ń rìn gba inú àkójọ, mú ìkéde ANSI tàbí Unicode bá ara wọn mu ní ìtẹ̀síwájú, kí o sì tọpinpin ìpín kọ̀ọ̀kan lọ́tọ̀. Pípadà àkójọ àwọn ìgbékalẹ̀ àṣàyàn kò tú àwọn okùn tí a pín síbòmíìràn tí àwọn ìgbékalẹ̀ yẹn ń tọ́ka sí lọ́fẹ̀ẹ́.
Níkẹyìn, ya ìbéèrè ìwọ̀n àwọn ètò sọ́tọ̀ kúrò nínú ìtọ́ ìrántí. Àtúnṣe cast kò fi hàn pé àṣàyàn WinINet tí olùrànlọ́wọ́ yàn ń nípa lórí ìṣàkóso kan, ìlànà kan tàbí àwọn ètò olùlò lọ́wọ́lọ́wọ́ nìkan. Ṣàyẹ̀wò ìhùwàsí API yẹn kí o tó gba ìyókù àpẹẹrẹ àtijọ́. Bí ó bá tún ń fi ìfitónà ìmúdójúìwọ̀n ránṣẹ́, yan wọ́n fún ìwọ̀n tí a pète.