ΕΠΙΔΙΌΡΘΩΣΗ: Σε έναν υπολογιστή που εκτελεί το .NET Framework 3.5 Service Pack 1, το πρόγραμμα μεταγλώττισης JIT και τα εγγενή γεννήτρια εικόνας (Ngen.exe) που χρησιμοποιούν το αρχείο Mscorjit.dll ενδέχεται να δημιουργήσει λανθασμένο κωδικό

Ισχύει για: .NET Framework 3.5 Service Pack 1

Συμπτώματα


Σε έναν υπολογιστή που εκτελεί το Microsoft.NET Framework 3.5 Service Pack 1 (SP1), το just-in-time (JIT) του και την εγγενή εφαρμογή δημιουργίας (Ngen.exe) που χρησιμοποιούν το αρχείο Mscorjit.dll ενδέχεται να δημιουργήσει λανθασμένο κωδικό. Επομένως, μια εφαρμογή διαχείρισης C++ 32-bit ενδέχεται να δώσουν λανθασμένα αποτελέσματα.

Αυτό το ζήτημα προκύπτει, εάν ισχύουν οι ακόλουθες συνθήκες:
  • Η δομή ή η κλάση στον πηγαίο κώδικα έχει λιγότερο από τέσσερις ανυσμάτων ποικιλιών και δεν αναφορών σε διαχειριζόμενο αντικείμενο.
  • Χρησιμοποιήστε την οδηγία Cpblk ή η Initblk οδηγία.
Σημείωση Αυτό το ζήτημα δεν παρουσιάζεται σε μια εφαρμογή 64-bit.

Αιτία


Αυτό το ζήτημα παρουσιάζεται εξαιτίας μιας παλινδρόμησης στο .NET Framework 3.5 SP1.

Προτεινόμενη αντιμετώπιση


Πληροφορίες άμεσης επιδιόρθωσης

Μια υποστηριζόμενη άμεση επιδιόρθωση είναι διαθέσιμη από τη Microsoft. Ωστόσο, αυτή η άμεση επιδιόρθωση προορίζεται για τη διόρθωση μόνο του προβλήματος που περιγράφεται σε αυτό το άρθρο. Εφαρμόστε αυτήν την άμεση επιδιόρθωση μόνο σε συστήματα που αντιμετωπίζουν το συγκεκριμένο πρόβλημα. Αυτή η άμεση επιδιόρθωση ενδέχεται να υποβληθεί σε πρόσθετο έλεγχο. Επομένως, εάν αυτό το ζήτημα δεν σας επηρεάζει ιδιαίτερα, σας συνιστούμε να περιμένετε έως την επόμενη ενημέρωση λογισμικού που περιέχει αυτήν την άμεση επιδιόρθωση.

Για να κάνετε λήψη αυτής της επείγουσας επιδιόρθωσης από τη συλλογή κωδίκων MSDN, επισκεφθείτε την ακόλουθη τοποθεσία της Microsoft στο Web:


Σημείωση Η συλλογή κωδίκων MSDN εμφανίζει τις γλώσσες για τις οποίες η επείγουσα επιδιόρθωση είναι διαθέσιμη. Εάν δεν βλέπετε τη γλώσσα σας στη λίστα, είναι επειδή η σελίδα πόρου συλλογής κώδικα δεν είναι διαθέσιμη για αυτήν τη γλώσσα.


Σημείωση Εάν προκύψουν πρόσθετα ζητήματα ή απαιτείται αντιμετώπιση προβλημάτων, ίσως χρειαστεί να δημιουργήσετε ξεχωριστή αίτηση εξυπηρέτησης. Για πρόσθετες ερωτήσεις υποστήριξης και θέματα που δεν αφορούν τη συγκεκριμένη άμεση επιδιόρθωση, ισχύουν οι συνηθισμένες χρεώσεις υποστήριξης. Για μια πλήρη λίστα αριθμών τηλεφώνου υποστήριξης και εξυπηρέτησης πελατών της Microsoft ή για να δημιουργήσετε ξεχωριστή αίτηση εξυπηρέτησης, επισκεφθείτε την ακόλουθη τοποθεσία της Microsoft στο Web:

Σημείωση Εάν έχετε μια εφαρμογή 32-bit που εκτελείται σε μια πλατφόρμα 64 bit, εφαρμόστε την επείγουσα επιδιόρθωση για την έκδοση 64-bit για να επιλύσετε αυτό το ζήτημα.

Προϋποθέσεις

Πρέπει να έχετε το .NET Framework 3.5 SP1, για να εφαρμόσετε αυτήν την επείγουσα επιδιόρθωση.

Απαίτηση επανεκκίνησης

Ίσως χρειαστεί να κάνετε επανεκκίνηση του υπολογιστή, εάν οποιοδήποτε από τα αρχεία που έχουν ενημερωθεί που χρησιμοποιούνται.

Πληροφορίες αντικατάστασης άμεσης επιδιόρθωσης

Αυτή η επείγουσα επιδιόρθωση δεν αντικαθιστά άλλες επείγουσες επιδιορθώσεις.

Πληροφορίες αρχείων

Η αγγλική έκδοση αυτής της άμεσης επιδιόρθωσης έχει τα χαρακτηριστικά αρχείου (ή νεότερα χαρακτηριστικά αρχείου) που παρατίθενται στον παρακάτω πίνακα. Οι ημερομηνίες και οι ώρες για τα αρχεία αυτά αναφέρονται σε Συντονισμένη παγκόσμια ώρα (UTC). Όταν προβάλλετε τις πληροφορίες του αρχείου, μετατρέπεται σε τοπική ώρα. Για να βρείτε τη διαφορά μεταξύ της ώρας UTC και της τοπικής ώρας, χρησιμοποιήστε την καρτέλα Zώνη ώρας στο στοιχείο Hμερομηνία και ώρα " στον πίνακα ελέγχου.
Τα Windows 2000, Windows XP και Windows Server 2003, οι x86 εκδόσεις
Όνομα αρχείουΈκδοση αρχείουΜέγεθος αρχείουΗμ/νίαΏρα
Mscordacwks.dll2.0.50727.3068992,26416-Sep-200813:13
Mscorjit.dll2.0.50727.3068367,10416-Sep-200813:13
Mscorlib.dll2.0.50727.30684,546,56016-Sep-200813:13
Mscorwks.dll2.0.50727.30685,815,80816-Sep-200813:13
Τα Windows 2000, Windows XP και Windows Server 2003, οι x64 εκδόσεις
Όνομα αρχείουΈκδοση αρχείουΜέγεθος αρχείουΗμ/νίαΏραΠλατφόρμα
Mscordacwks.dll2.0.50727.3068992,26416-Sep-200813:13x86
Mscorjit.dll2.0.50727.3068367,10416-Sep-200813:13x86
Mscorlib.dll2.0.50727.30684,546,56016-Sep-200813:13x86
Mscorwks.dll2.0.50727.30685,815,80816-Sep-200813:13x86
Mscordacwks.dll2.0.50727.30681,767,94416-Sep-200810:33x64
Mscorjit.dll2.0.50727.30681,580,03216-Sep-200810:33x64
Mscorlib.dll2.0.50727.30684,562,94416-Sep-200810:33x64
Mscorwks.dll2.0.50727.306810,079,74416-Sep-200810:33x64
Τα Windows 2000, Windows XP και Windows Server 2003, εκδόσεις IA-64
Όνομα αρχείουΈκδοση αρχείουΜέγεθος αρχείουΗμ/νίαΏραΠλατφόρμα
Mscordacwks.dll2.0.50727.3068992,26416-Sep-200813:13x86
Mscorjit.dll2.0.50727.3068367,10416-Sep-200813:13x86
Mscorlib.dll2.0.50727.30684,546,56016-Sep-200813:13x86
Mscorwks.dll2.0.50727.30685,815,80816-Sep-200813:13x86
Mscordacwks.dll2.0.50727.30683,087,88016-Sep-200810:44IA-64
Mscorjit.dll2.0.50727.30682,560,51216-Sep-200810:44IA-64
Mscorlib.dll2.0.50727.30684,005,88816-Sep-200810:44IA-64
Mscorwks.dll2.0.50727.306820,153,85616-Sep-200810:44IA-64
Τα Windows Vista Service Pack 1 (SP1) και Windows Server 2008, x86 εκδόσεις
Όνομα αρχείουΈκδοση αρχείουΜέγεθος αρχείουΗμ/νίαΏραΠλατφόρμα
Mscorlib.resources.dll2.0.50727.3053352,25615-Sep-200822:25x86
Mscorlib.resources.dll2.0.50727.3053303,10415-Sep-200822:25x86
Mscorlib.resources.dll2.0.50727.3053299,00815-Sep-200822:25x86
Mscorlib.resources.dll2.0.50727.3053315,39227-Jul-200817:58x86
Mscorlib.resources.dll2.0.50727.3053425,98415-Sep-200822:25x86
Mscorlib.resources.dll2.0.50727.3053307,20027-Jul-200817:58x86
Mscorlib.resources.dll2.0.50727.3053299,00815-Sep-200822:25x86
Mscorlib.resources.dll2.0.50727.3053311,29627-Jul-200817:58x86
Mscorlib.resources.dll2.0.50727.3053331,77615-Sep-200822:25x86
Mscorlib.resources.dll2.0.50727.3053315,39215-Sep-200822:25x86
Mscorlib.resources.dll2.0.50727.3053307,20027-Jul-200817:55x86
Mscorlib.resources.dll2.0.50727.3053348,16027-Jul-200817:58x86
Mscorlib.resources.dll2.0.50727.3053319,48827-Jul-200817:55x86
Mscorlib.resources.dll2.0.50727.3053290,81615-Sep-200822:25x86
Mscorlib.resources.dll2.0.50727.3053303,10415-Sep-200822:25x86
Mscorlib.resources.dll2.0.50727.3053311,29615-Sep-200822:25x86
Mscorlib.resources.dll2.0.50727.3053303,10427-Jul-200817:55x86
Mscorlib.resources.dll2.0.50727.3053307,20015-Sep-200822:25x86
Mscorlib.resources.dll2.0.50727.1434397,31211-Jan-200822:59x86
Mscorlib.resources.dll2.0.50727.3053299,00815-Sep-200822:25x86
Mscorlib.resources.dll2.0.50727.3053299,00815-Sep-200822:25x86
Mscorlib.resources.dll2.0.50727.3053278,52827-Jul-200817:55x86
Mscorlib.resources.dll2.0.50727.3053278,52827-Jul-200817:55x86
Big5.nlpΔεν ισχύει66,72818-Dec-200721:03Δεν ισχύει
Bopomofo.nlpΔεν ισχύει82,17218-Dec-200721:03Δεν ισχύει
Ksc.nlpΔεν ισχύει116,75618-Dec-200721:04Δεν ισχύει
Mscorlib.dll2.0.50727.30684,546,56001-Oct-200822:27x86
Normidna.nlpΔεν ισχύει59,34218-Dec-200721:05Δεν ισχύει
Normnfc.nlpΔεν ισχύει45,79418-Dec-200721:05Δεν ισχύει
Normnfd.nlpΔεν ισχύει39,28418-Dec-200721:05Δεν ισχύει
Normnfkc.nlpΔεν ισχύει66,38418-Dec-200721:05Δεν ισχύει
Normnfkd.nlpΔεν ισχύει60,29418-Dec-200721:05Δεν ισχύει
Prc.nlpΔεν ισχύει83,74818-Dec-200721:05Δεν ισχύει
Prcp.nlpΔεν ισχύει83,74818-Dec-200721:05Δεν ισχύει
Sortkey.nlpΔεν ισχύει262,14818-Dec-200721:05Δεν ισχύει
Sorttbls.nlpΔεν ισχύει20,32018-Dec-200721:05Δεν ισχύει
Xjis.nlpΔεν ισχύει28,28818-Dec-200721:05Δεν ισχύει
Mscordacwks.dll2.0.50727.3068992,26401-Oct-200822:27x86
Mscorjit.dll2.0.50727.3068367,10424-Sep-200822:21x86
Mscorwks.dll2.0.50727.30685,815,80801-Oct-200822:27x86
Το Windows Vista SP1 και Windows Server 2008, x64 εκδόσεις
Όνομα αρχείουΈκδοση αρχείουΜέγεθος αρχείουΗμ/νίαΏραΠλατφόρμα
Big5.nlpΔεν ισχύει66,72818-Dec-200721:01Δεν ισχύει
Bopomofo.nlpΔεν ισχύει82,17218-Dec-200721:01Δεν ισχύει
Ksc.nlpΔεν ισχύει116,75618-Dec-200721:02Δεν ισχύει
Mscorlib.dll2.0.50727.30684,562,94401-Oct-200822:25x64
Normidna.nlpΔεν ισχύει59,34218-Dec-200721:03Δεν ισχύει
Normnfc.nlpΔεν ισχύει45,79418-Dec-200721:03Δεν ισχύει
Normnfd.nlpΔεν ισχύει39,28418-Dec-200721:03Δεν ισχύει
Normnfkc.nlpΔεν ισχύει66,38418-Dec-200721:03Δεν ισχύει
Normnfkd.nlpΔεν ισχύει60,29418-Dec-200721:03Δεν ισχύει
Prc.nlpΔεν ισχύει83,74818-Dec-200721:03Δεν ισχύει
Prcp.nlpΔεν ισχύει83,74818-Dec-200721:03Δεν ισχύει
Sortkey.nlpΔεν ισχύει262,14818-Dec-200721:03Δεν ισχύει
Sorttbls.nlpΔεν ισχύει20,32018-Dec-200721:03Δεν ισχύει
Xjis.nlpΔεν ισχύει28,28818-Dec-200721:03Δεν ισχύει
Mscordacwks.dll2.0.50727.30681,767,94401-Oct-200822:25x64
Mscorjit.dll2.0.50727.30681,580,03224-Sep-200823:06x64
Mscorwks.dll2.0.50727.306810,079,74401-Oct-200822:25x64
Mscorlib.resources.dll2.0.50727.3053352,25615-Sep-200822:26x86
Mscorlib.resources.dll2.0.50727.3053303,10415-Sep-200822:25x86
Mscorlib.resources.dll2.0.50727.3053299,00815-Sep-200822:26x86
Mscorlib.resources.dll2.0.50727.3053315,39227-Jul-200818:02x86
Mscorlib.resources.dll2.0.50727.3053425,98415-Sep-200822:26x86
Mscorlib.resources.dll2.0.50727.3053307,20027-Jul-200818:02x86
Mscorlib.resources.dll2.0.50727.3053299,00815-Sep-200822:26x86
Mscorlib.resources.dll2.0.50727.3053311,29627-Jul-200818:02x86
Mscorlib.resources.dll2.0.50727.3053331,77615-Sep-200822:26x86
Mscorlib.resources.dll2.0.50727.3053315,39215-Sep-200822:25x86
Mscorlib.resources.dll2.0.50727.3053307,20027-Jul-200817:56x86
Mscorlib.resources.dll2.0.50727.3053348,16027-Jul-200818:02x86
Mscorlib.resources.dll2.0.50727.3053319,48827-Jul-200817:56x86
Mscorlib.resources.dll2.0.50727.3053290,81615-Sep-200822:26x86
Mscorlib.resources.dll2.0.50727.3053303,10415-Sep-200822:25x86
Mscorlib.resources.dll2.0.50727.3053311,29615-Sep-200822:25x86
Mscorlib.resources.dll2.0.50727.3053303,10427-Jul-200817:56x86
Mscorlib.resources.dll2.0.50727.3053307,20015-Sep-200822:25x86
Mscorlib.resources.dll2.0.50727.1434397,31211-Jan-200822:59x86
Mscorlib.resources.dll2.0.50727.3053299,00815-Sep-200822:25x86
Mscorlib.resources.dll2.0.50727.3053299,00815-Sep-200822:25x86
Mscorlib.resources.dll2.0.50727.3053278,52827-Jul-200817:56x86
Mscorlib.resources.dll2.0.50727.3053278,52827-Jul-200817:56x86
Big5.nlpΔεν ισχύει66,72818-Dec-200721:03Δεν ισχύει
Bopomofo.nlpΔεν ισχύει82,17218-Dec-200721:03Δεν ισχύει
Ksc.nlpΔεν ισχύει116,75618-Dec-200721:04Δεν ισχύει
Mscorlib.dll2.0.50727.30684,546,56001-Oct-200822:27x86
Normidna.nlpΔεν ισχύει59,34218-Dec-200721:05Δεν ισχύει
Normnfc.nlpΔεν ισχύει45,79418-Dec-200721:05Δεν ισχύει
Normnfd.nlpΔεν ισχύει39,28418-Dec-200721:05Δεν ισχύει
Normnfkc.nlpΔεν ισχύει66,38418-Dec-200721:05Δεν ισχύει
Normnfkd.nlpΔεν ισχύει60,29418-Dec-200721:05Δεν ισχύει
Prc.nlpΔεν ισχύει83,74818-Dec-200721:05Δεν ισχύει
Prcp.nlpΔεν ισχύει83,74818-Dec-200721:05Δεν ισχύει
Sortkey.nlpΔεν ισχύει262,14818-Dec-200721:05Δεν ισχύει
Sorttbls.nlpΔεν ισχύει20,32018-Dec-200721:05Δεν ισχύει
Xjis.nlpΔεν ισχύει28,28818-Dec-200721:05Δεν ισχύει
Mscordacwks.dll2.0.50727.3068992,26401-Oct-200822:27x86
Mscorjit.dll2.0.50727.3068367,10424-Sep-200822:21x86
Mscorwks.dll2.0.50727.30685,815,80801-Oct-200822:27x86
Το Windows Vista SP1 και Windows Server 2008, εκδόσεις IA-64
Όνομα αρχείουΈκδοση αρχείουΜέγεθος αρχείουΗμ/νίαΏραΠλατφόρμα
Big5.nlpΔεν ισχύει66,72818-Dec-200721:06Δεν ισχύει
Bopomofo.nlpΔεν ισχύει82,17218-Dec-200721:06Δεν ισχύει
Ksc.nlpΔεν ισχύει116,75618-Dec-200721:06Δεν ισχύει
Mscorlib.dll2.0.50727.30684,005,88801-Oct-200822:26IA-64
Normidna.nlpΔεν ισχύει59,34218-Dec-200721:08Δεν ισχύει
Normnfc.nlpΔεν ισχύει45,79418-Dec-200721:08Δεν ισχύει
Normnfd.nlpΔεν ισχύει39,28418-Dec-200721:08Δεν ισχύει
Normnfkc.nlpΔεν ισχύει66,38418-Dec-200721:08Δεν ισχύει
Normnfkd.nlpΔεν ισχύει60,29418-Dec-200721:08Δεν ισχύει
Prc.nlpΔεν ισχύει83,74818-Dec-200721:08Δεν ισχύει
Prcp.nlpΔεν ισχύει83,74818-Dec-200721:08Δεν ισχύει
Sortkey.nlpΔεν ισχύει262,14818-Dec-200721:08Δεν ισχύει
Sorttbls.nlpΔεν ισχύει20,32018-Dec-200721:08Δεν ισχύει
Xjis.nlpΔεν ισχύει28,28818-Dec-200721:08Δεν ισχύει
Mscordacwks.dll2.0.50727.30683,087,88001-Oct-200822:26IA-64
Mscorjit.dll2.0.50727.30682,560,51224-Sep-200823:14IA-64
Mscorwks.dll2.0.50727.306820,153,85601-Oct-200822:26IA-64
Mscorlib.resources.dll2.0.50727.3053315,39227-Jul-200817:58x86
Mscorlib.resources.dll2.0.50727.3053311,29627-Jul-200817:58x86
Mscorlib.resources.dll2.0.50727.3053348,16027-Jul-200817:58x86
Mscorlib.resources.dll2.0.50727.3053319,48827-Jul-200817:58x86
Mscorlib.resources.dll2.0.50727.3053278,52827-Jul-200817:58x86
Mscorlib.resources.dll2.0.50727.3053278,52827-Jul-200817:59x86
Big5.nlpΔεν ισχύει66,72818-Dec-200721:03Δεν ισχύει
Bopomofo.nlpΔεν ισχύει82,17218-Dec-200721:03Δεν ισχύει
Ksc.nlpΔεν ισχύει116,75618-Dec-200721:04Δεν ισχύει
Mscorlib.dll2.0.50727.30684,546,56001-Oct-200822:27x86
Normidna.nlpΔεν ισχύει59,34218-Dec-200721:05Δεν ισχύει
Normnfc.nlpΔεν ισχύει45,79418-Dec-200721:05Δεν ισχύει
Normnfd.nlpΔεν ισχύει39,28418-Dec-200721:05Δεν ισχύει
Normnfkc.nlpΔεν ισχύει66,38418-Dec-200721:05Δεν ισχύει
Normnfkd.nlpΔεν ισχύει60,29418-Dec-200721:05Δεν ισχύει
Prc.nlpΔεν ισχύει83,74818-Dec-200721:05Δεν ισχύει
Prcp.nlpΔεν ισχύει83,74818-Dec-200721:05Δεν ισχύει
Sortkey.nlpΔεν ισχύει262,14818-Dec-200721:05Δεν ισχύει
Sorttbls.nlpΔεν ισχύει20,32018-Dec-200721:05Δεν ισχύει
Xjis.nlpΔεν ισχύει28,28818-Dec-200721:05Δεν ισχύει
Mscordacwks.dll2.0.50727.3068992,26401-Oct-200822:27x86
Mscorjit.dll2.0.50727.3068367,10424-Sep-200822:21x86
Mscorwks.dll2.0.50727.30685,815,80801-Oct-200822:27x86

Εναλλακτικός τρόπος αντιμετώπισης


Για να επιλύσετε αυτό το ζήτημα, χρησιμοποιήστε μία από τις ακόλουθες μεθόδους.

Μέθοδος 1

Εάν ο κώδικας εφαρμογής μοιάζει με το δείγμα κώδικα στην ενότητα "Περισσότερες πληροφορίες", εντοπίστε την ακόλουθη γραμμή κώδικα.
#define GETVECTOR3D(vec3d) (*reinterpret_cast<AcGeVector3d*>(&((vec3d).m_x))
Αλλάξτε αυτήν τη γραμμή κώδικα ως εξής.
#define GETVECTOR3D(vec3d) (*reinterpret_cast<AcGeVector3d*>(&((vec3d)))

Μέθοδος 2

Η ανάπτυξη ενός αρχείου .ini. Για να γίνει αυτό, δημιουργήστε ένα αρχείο που περιέχει τον ακόλουθο κώδικα.
[.NET Framework Debugging Control]AllowOptimize=0

Ονομάστε το αρχείο .ini το ίδιο με το προβληματικό λειτουργική μονάδα, αλλά χρησιμοποιούν την επέκταση .ini αντί για την επέκταση .dll. Για παράδειγμα, το δείγμα κώδικα στην ενότητα "Περισσότερες πληροφορίες", ονομάστε το αρχείο .ini στο αρχείο Bug.ini. Τοποθετήστε το αρχείο Bug.ini στον ίδιο κατάλογο με το αρχείο Bug.dll.

Σημείωση Το μειονέκτημα αυτής της μεθόδου είναι η πιθανή επίπτωση επιδόσεων για καμία βελτιστοποιήσεις. Εάν χρησιμοποιείτε την εγγενή εφαρμογή δημιουργίας (Ngen.exe) για την προ-μεταγλώττιση της λειτουργικής μονάδας, αυτή η μέθοδος δεν είναι εφαρμόσιμη.

Η μέθοδος 3

Η επιλογή NoOptimization από την απαρίθμηση MethodImplOptions για τις μεθόδους προβληματικά εφαρμόζονται επιλεκτικά χρησιμοποιώντας την κλάση MethodImplAttribute .

Σημείωση Αυτή η μέθοδος απενεργοποιεί τις βελτιστοποιήσεις για το πρόγραμμα μεταγλώττισης JIT και τα εγγενή εφαρμογή δημιουργίας (Ngen.exe) σε επίπεδο ανά μέθοδο. Πόσο η απόδοση επηρεάζεται η ποικίλλει, ανάλογα με τη μέθοδο.

Κατάσταση


Η Microsoft έχει επιβεβαιώσει ότι πρόκειται για ένα ζήτημα των προϊόντων της Microsoft που παρατίθενται στην ενότητα "Ισχύει για".

Περισσότερες πληροφορίες


Βήματα για την αναπαραγωγή του προβλήματος

  1. Για να δημιουργήσετε μια εφαρμογή C++ που βασίζεται στο .NET Framework 3.5 SP1.
  2. Προσθήκη αρχείου .cpp στο έργο, ονομάστε αυτό το αρχείο, το αρχείο Bug.cpp και, στη συνέχεια, επικολλήστε τον παρακάτω κώδικα στο αρχείο Bug.cpp.
    #using <mscorlib.dll>#include <stdlib.h>
    class AcGeVector3d
    {
    double x, y, z;
    public:
    __forceinline AcGeVector3d(const AcGeVector3d& src): x(src.x),y(src.y),z(src.z)
    {
    }
    __forceinline AcGeVector3d(double xx, double yy, double zz) : x(xx),y(yy),z(zz)
    {
    }
    __forceinline AcGeVector3d operator / (double val) const
    {
    return AcGeVector3d (x/val, y/val, z/val);
    }
    };
    #define GETVECTOR3D(vec3d) (*reinterpret_cast<AcGeVector3d*>(&((vec3d).m_x)))
    namespace Geometry
    {
    [System::Runtime::InteropServices::StructLayout(System::Runtime::InteropServices::LayoutKind::Sequential)]
    public value class Vector3d
    {
    internal:
    double m_x, m_y, m_z;
    Vector3d(const AcGeVector3d* obj)
    {
    GETVECTOR3D(*this) = *obj;
    }
    public:
    Vector3d(double x, double y, double z):m_x(x),m_y(y), m_z(z) {}
    Vector3d DivideBy(double value)
    {
    return Vector3d(&GETVECTOR3D(*this).operator /(value));
    }
    virtual System::String^ ToString() override
    {
    return System::String::Format("{0}, {1}, {2}", m_x, m_y, m_z);
    }
    };
    }

  3. Για να μεταγλωττίσετε το αρχείο Bug.cpp, εκτελέστε την ακόλουθη εντολή:
    CL /clr /GL /O2 bug.cpp /link /dll /out:bug.dll
  4. Δημιουργία νέου Microsoft Visual C# έργου θα χρησιμοποιηθεί ως το έργο του υπολογιστή-πελάτη.
  5. Ονομάστε το αρχείο κώδικα στο αρχείο Test.cs και, στη συνέχεια, επικολλήστε τον παρακάτω κώδικα στο αρχείο Test.cs.
    using Geometry;namespace Test
    {
    class Tester
    {
    static void Main()
    {
    Vector3d v = new Vector3d(200, 200, 0);
    v = v.DivideBy(150);
    System.Console.WriteLine("{0}", v);
    }
    }
    }

  6. Για να μεταγλωττίσετε το αρχείο Test.cs, εκτελέστε την ακόλουθη εντολή:
    CSC /r:bug.dll test.cs
  7. Για να ενσωματώσετε το δηλωτικό στο αρχείο Test.exe, εκτελέστε την ακόλουθη εντολή:
    MT.exe - nologo-δηλώσεων bug.dll.manifest-outputresource:test.exe;1
  8. Εκτελέστε το αρχείο Test.exe.
Παρατηρήστε ότι το πραγματικό αποτέλεσμα είναι ως εξής:
1.33333333333333, 1.333333333333, 0
Ωστόσο, το αναμενόμενο αποτέλεσμα είναι ως εξής:
1.33333333333333, 0, 0

Αναφορές


Για περισσότερες πληροφορίες σχετικά με την ορολογία των ενημερώσεων λογισμικού, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να προβάλετε το άρθρο στη Γνωσιακή Βάση της Microsoft:
824684 περιγραφή της βασικής ορολογίας που χρησιμοποιείται για την περιγραφή ενημερωμένων εκδόσεων λογισμικού της Microsoft