2010-03-15 8 views
16

Tôi đang cố thêm một DLL COM VC6 vào giải pháp C# VS2010RC của chúng tôi. DLL được biên dịch với các công cụ VC6 để tạo ra một phiên bản x86 và được biên dịch với các công cụ nền tảng VC7 để tạo ra một VC7 DLL.Visual Studio 2010 64-bit COM Interop Số phát hành

Phiên bản x86 của hội đồng hoạt động tốt miễn là nền tảng C# của dự án tiêu thụ được đặt thành x86. Nó không quan trọng cho dù phiên bản x64 hoặc x86 của DLL thực sự đã được đăng ký chưa. Nó hoạt động với cả hai. Nếu nền tảng được đặt thành 'CPU bất kỳ', tôi nhận được BadImageFormatException khi tải của Interop.<name>.dll.

Đối với phiên bản x64, tôi thậm chí không thể tạo dự án. Tôi nhận được lỗi tlbimp:

TlbImp : error TI0000: A single valid machine type compatible with the input type library must be specified.

Có ai nhìn thấy vấn đề này không?

EDIT:

Tôi đã nghiên cứu kỹ hơn về vấn đề này và nghĩ rằng đây có thể là lỗi của Visual Studio. Tôi có một giải pháp sạch. Tôi mang theo lắp ráp COM của tôi với ngôn ngữ bất khả tri 'Bất kỳ CPU' nào được chọn. Kiến trúc quy trình của DLL Interop kết quả là x86 thay vì MSIL.

Có thể phải thực hiện Interop bằng tay để thực hiện việc này.

Nếu có ai có đề xuất khác cho tôi biết.

Trả lời

47

Vấn đề này có thể được giải quyết bằng cách mở tập tin csproj và thêm các nút sau để bất kỳ '(Cấu hình) | Bất kỳ CPU' nút đang thiếu nó:

<PlatformTarget>AnyCPU</PlatformTarget> 

Nếu nút này không có mặt TlbImp sẽ mặc định thành x86 và gây ra sự cố.

+0

Tôi ước tôi có thể bỏ phiếu này thêm vài lần nữa. Đó là rõ ràng những gì lỗi có nghĩa là nhìn lại nhưng bối rối ở cái nhìn đầu tiên. – xcud

+0

Nó hoạt động nhưng tôi cần phải thêm riêng biệt mục trong tệp CSProj để VS bắt đầu thực sự sử dụng cài đặt này. – Roboblob