2012-11-02 38 views
5

Tôi thấy lỗi MIDL2398 mỗi khi tôi cố gắng biên dịch dự án Visual C++ (Visual Studio 2010) sử dụng COM. Dự án này xây dựng hoàn toàn tốt đẹp trên máy phát triển Windows 7 của tôi và trên máy xây dựng Windows Server 2008, nhưng không phải trên máy xây dựng Windows Server 2012.Lỗi MIDL2398 xây dựng với Visual Studio 2010 trên Windows 2012

tôi tìm thấy trang web này về các lỗi biên dịch tức khác nhau: http://blog.yezhucn.com/midl/compiler_errors.htm

Nhưng, tôi đã cố gắng đó là gợi ý cho MIDL2398, tôi xác nhận rằng "midlc.exe" đang ở trong cùng thư mục với "midl.exe" và cả hai đều là phiên bản tương tự (cả hai phiên bản tệp: 7.0.555.1 phiên bản sản phẩm: 6.1.7600.16385, từ Windows SDK phiên bản 7.1).

Tôi đoán nó có liên quan đến Windows Server 2012 nhưng tôi không biết.

Có ai có thể nhận được trình biên dịch MIDL phiên bản v7.1 của Windows SDK để làm việc trên Windows Server 2012 không? Hoặc, không ai biết những gì khác có thể gây ra MIDL2398?

+0

Từ Visual Studio 2010 Command Prompt, nhập "where midl * .exe" và xác minh rằng chỉ tìm thấy hai tệp này. Procyson của SysInternals là một cách khác để xác minh rằng các tập tin EXE chính xác được sử dụng. –

+0

Tôi đã làm điều đó bên trong sự kiện dựng sẵn cho dự án mà tôi đang xây dựng, và lệnh đó đã cho tôi đường dẫn tới Windows EXE EXXs v7.1, đó là những gì tôi mong đợi. Tôi cũng đã thay đổi các thiết lập dự án để thử sử dụng Windows SDK v7.0A (đi kèm với Visual Studio 2010), lệnh where báo cáo chính xác đường dẫn tới phiên bản v7.0A của EXE trung gian, nhưng tôi vẫn nhận được cùng một lỗi midl bất kể cho dù tôi biên dịch với Windows SDK v7.0A hay v7.1. Một đồng nghiệp, trên cùng một máy ảo Windows 2012, đã thử biên dịch với phiên bản 8 của Windows SDK và điều đó cũng không thành công. – MikeW

Trả lời

9

Tôi đã tìm ra sự cố.

Tôi đã cài đặt bộ SysInternals (http://technet.microsoft.com/en-US/sysinternals) trên máy chủ xây dựng và sau đó sử dụng Process Monitor (procmon) để xem MIDL.exe đang cố gắng làm gì và không thực hiện.

Trong trường hợp của tôi, hóa ra là có tệp ở gốc của ổ C: có tên là "Chương trình", do đó đường dẫn đến tệp này là "C: \ Program". Tôi không biết những gì hoặc tại sao, nhưng MIDL.exe đã làm một cái gì đó với tập tin này. Tôi đổi tên tệp thành "Program - MW" và lỗi MIDL2398 đã biến mất.

Nếu có ai khác gặp lỗi MIDL2398, tôi khuyên bạn cũng nên sử dụng Trình giám sát quy trình của SysInternals, thêm bộ lọc cho Process Name - Chứa - midl, chạy trình biên dịch của bạn và kiểm tra nhật ký Process Monitor để tìm lỗi và lạ hành vi. Nó làm việc cho tôi!

+1

Tôi gặp vấn đề tương tự, cảm ơn! Không có ý tưởng làm thế nào mà tập tin có tên là chương trình đã có – deltanine

+1

Tôi thấy rằng bạn có [báo cáo lỗi trên connect.microsoft.com] (https://connect.microsoft.com/VisualStudio/feedback/details/771055/midl-compiler-fails -with-midl2398-error-khi-một-tệp-tồn tại-tại-c-chương trình).Mặc dù báo cáo đã được đóng vào năm 2012, tôi có thể xác nhận rằng sự cố vẫn tồn tại trong bản cập nhật Visual Studio 2013 5. Trong trường hợp của tôi, tệp C: \ Program' được tạo bởi một trong các tiện ích nội bộ của chúng tôi. - nó cắt ngắn 'C: \ Program Files \ ... ´ chỉ đơn giản là ´C: \ Program 'và sau đó vui vẻ viết những thứ vào tập tin đó. – herzbube

1

Trên VS2012, lỗi giữa xảy ra do trình cài đặt com0com tạo chương trình tệp trong ổ C. Điều này gây rối với MIDL như đã đề cập trước đó.

Tệp C: \ Program có nội dung sau. Chỉ cần đổi tên tệp này thành tệp khác, Ví dụ: C: __ Chương trình giúp Midl vui vẻ.

DIALOG: { SetupOpenInfFile (C: \ WINDOWS \ system32 \ com0com.inf) trên dòng 0 LỖI: 2 - Hệ thống không thể tìm thấy các tập tin cụ thể.

} ...

Các vấn đề liên quan