การแก้ไข: บนคอมพิวเตอร์ที่กำลังเรียกใช้ 1 .NET Framework 3.5 Service Pack คอมไพเลอร์ JIT และแบบดั้งเดิมรูปตัวสร้าง (Ngen.exe) ที่ใช้แฟ้ม Mscorjit.dll อาจสร้างรหัสไม่ถูกต้อง

นำไปใช้กับ: .NET Framework 3.5 Service Pack 1

อาการ


บนคอมพิวเตอร์ที่กำลังเรียกใช้การ Microsoft .NET Framework 3.5 Service Pack 1 (SP1), คอมไพเลอร์เพิ่ง--เวลา (JIT) และแบบดั้งเดิมรูปตัวสร้าง (Ngen.exe) ที่ใช้แฟ้ม Mscorjit.dll อาจสร้างรหัสไม่ถูกต้อง ดังนั้น แอพลิเคชันการจัดการ c ++ 32 บิตอาจก่อให้เกิดผลลัพธ์ที่ไม่ถูกต้อง

ปัญหานี้เกิดขึ้นหากมีเงื่อนไขต่อไปนี้:
  • โครงสร้างหรือคลาสในรหัสแหล่งมาได้น้อยกว่าแบบสเกลาที่สี่และไม่มีข้อมูลอ้างอิงของวัตถุที่มีการจัดการ
  • คุณใช้คำสั่ง Cpblk หรือคำสั่ง Initblk
หมายเหตุ ปัญหานี้เกิดขึ้นในโปรแกรมประยุกต์ 64 บิต

สาเหตุ


ปัญหานี้เกิดขึ้นเนื่องจากการถดถอยในแบบ SP1 .NET Framework 3.5

การแก้ปัญหา


ข้อมูลโปรแกรมแก้ไขด่วน

มีโปรแกรมแก้ไขด่วนที่รองรับพร้อมให้บริการจาก Microsoft อย่างไรก็ตาม โปรแกรมแก้ไขด่วนนี้มุ่งหวังเพื่อการแก้ไขเฉพาะปัญหาที่อธิบายไว้ในบทความนี้ ใช้ hotfix นี้เฉพาะกับระบบต่าง ๆ ที่พบปัญหานี้ โปรแกรมแก้ไขด่วนนี้อาจได้รับการทดสอบเพิ่มเติม ดังนั้น ถ้าคุณไม่ได้รับผลกระทบจากปัญหานี้รุนแรง เราขอแนะนำให้ คุณรอการปรับปรุงซอฟต์แวร์ถัดไปที่ประกอบด้วยโปรแกรมแก้ไขด่วนนี้

หากต้องการดาวน์โหลดโปรแกรมแก้ไขด่วนนี้จากแกลเลอรีรหัส MSDN ให้ไปที่เว็บไซต์ต่อไปนี้ของ Microsoft:


หมายเหตุ แกลเลอรีรหัส MSDN แสดงภาษาซึ่งโปรแกรมแก้ไขด่วนพร้อมใช้งานสำหรับภาษานั้น ถ้าคุณไม่เห็นภาษาของคุณปรากฏ อาจเป็น เพราะหน้าแกลเลอรีของรหัสทรัพยากรจะไม่พร้อมใช้งานสำหรับภาษานั้น


หมายเหตุ ถ้ามีปัญหาอื่น ๆ เกิดขึ้น หรือถ้าจำเป็นต้องแก้ไขปัญหาใด ๆ คุณอาจต้องสร้างคำขอรับบริการแยกต่างหาก จะมีค่าใช้จ่ายในการสนับสนุนปกติกับคำถามเพิ่มเติมและเรื่องอื่น ๆ ที่ไม่มีสิทธิได้รับโปรแกรมแก้ไขด่วนเฉพาะนี้ สำหรับรายการหมายเลขโทรศัพท์ฉบับสมบูรณ์ของฝ่ายบริการลูกค้าและการสนับสนุนของ Microsoft หรือเพื่อสร้างคำขอรับบริการแยกต่างหาก แวะไปที่เว็บไซต์ Microsoft ต่อไปนี้:

หมายเหตุ ถ้าคุณมีโปรแกรมประยุกต์แบบ 32 บิตที่ทำงานบนแพลตฟอร์มแบบ 64 บิต ใช้โปรแกรมแก้ไขด่วนสำหรับรุ่น 64 บิตเพื่อแก้ไขปัญหานี้

ข้อกำหนดเบื้องต้น

คุณต้องมีการ.NET Framework 3.5 ติดตั้ง SP1 เมื่อต้องการใช้โปรแกรมแก้ไขด่วนนี้

ข้อกำหนดการรีสตาร์ท

คุณอาจต้องรีสตาร์ทคอมพิวเตอร์หากมีการใช้แฟ้มที่มีการปรับปรุงใด ๆ

ข้อมูลการแทนที่โปรแกรมแก้ไขด่วน

โปรแกรมแก้ไขด่วนนี้ไม่ได้แทนโปรแกรมแก้ไขด่วนอื่น ๆ

ข้อมูลแฟ้ม

เวอร์ชันภาษาอังกฤษของโปรแกรมแก้ไขด่วนนี้มีแอตทริบิวต์ของแฟ้ม (หรือแอตทริบิวต์ของแฟ้มที่ใหม่กว่านี้) ซึ่งแสดงรายการไว้ในตารางต่อไปนี้ วันที่และเวลาสำหรับแฟ้มเหล่านี้จะแสดงรายการไว้ในรูปแบบเวลามาตรฐานสากล (UTC) เมื่อคุณดูข้อมูลแฟ้ม ระบบจะแปลงข้อมูลนี้เป็นเวลาท้องถิ่น เมื่อต้องการค้นหาความแตกต่างระหว่างเวลา UTC กับเวลาท้องถิ่น ใช้แท็บ โซนเวลา ในรายการ วันที่และเวลา ในแผงควบคุม
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) precompile โมดูล วิธีการนี้ไม่สามารถใช้

วิธีที่ 3

เลือกที่จะใช้ตัวเลือกNoOptimizationของการแจงนับMethodImplOptionsกับวิธีการตัวที่มีปัญหา โดยใช้คลาสMethodImplAttribute

หมายเหตุ วิธีการนี้ปิดใช้งานการปรับให้เหมาะสม สำหรับคอมไพเลอร์ JIT และแบบดั้งเดิมรูปตัวสร้าง (Ngen.exe) ในระดับสำหรับแต่ละวิธี จำนวนมีผลต่อประสิทธิภาพการทำงานแตกต่างกันไป ขึ้นอยู่กับวิธีการ

สถานะ


Microsoft ยืนยันว่านี่เป็นปัญหาในผลิตภัณฑ์ของ Microsoft ซึ่งแสดงไว้ในส่วน "นำไปใช้กับ"

ข้อมูลเพิ่มเติม


ขั้นตอนในการทบทวนเกิดปัญหา

  1. สร้างโปรแกรมประยุกต์ c ++ที่ยึดตามแบบ SP1 .NET Framework 3.5
  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 เรียกใช้คำสั่งต่อไปนี้:
    ล้ /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