2013-03-12 48 views
5

Tôi đã trở thành vấn đề trong một vài giờ ngay bây giờ. Tôi hy vọng ai đó đã có một vấn đề tương tự với điều này.Gỡ lỗi dự án VB6 gọi là .Net (C#) dll

Chúng tôi đã phát triển một mẫu thử nghiệm .Net (C#) dll sử dụng VS2010, và muốn có thể gọi dll này trong cả ứng dụng C# lẫn ứng dụng VB6.

Câu hỏi của tôi là:

Có thể gỡ lỗi một ứng dụng VB6 mà đang kêu gọi một dll Net? Tôi nhận được thông báo lỗi "Lỗi tự động hóa Hệ thống không thể tìm thấy tệp được chỉ định"

Thông báo lỗi cho thấy có gì đó thiếu trong ứng dụng VB6 của tôi để tìm tệp .Net.

Tôi biết rằng nếu ứng dụng VB6 đã được biên soạn, và .exe đã được tạo ra, VB6 sẽ thành công gọi các chức năng dll Net khi sử dụng .exe

Tuy nhiên điều quan trọng là chúng ta có thể gỡ lỗi thông qua ứng dụng VB6 của chúng tôi. Thật không may gỡ lỗi không cho phép bạn bước qua dòng mã instantiating đối tượng lớp .Net DLL. Tôi dường như không thể làm điều này.

LƯU Ý: Tôi đã xem xét các diễn đàn và tài liệu MSDN và tôi chủ yếu tìm giải pháp để gọi một dll VB6 trong .NET; mà không may là ngược lại với những gì chúng ta cần làm.

LƯU Ý: Tôi đã đăng ký bộ sưu tập .Net (C#) đã biên dịch và tham chiếu nó trong dự án VB6.

Tuy nhiên, tôi đã tìm thấy hai trang này, dường như là những gì chúng tôi cần, nhưng đó là giải pháp để gọi một tệp .NET (C#) được tạo bằng cách sử dụng VS2005. Điều này dường như không hoạt động khi dll .NET (C#) được tạo ra bằng cách sử dụng VS2010.

site1 site2

Nếu ai đó có thể đưa ra bất cứ lời đề nghị hoặc trực tiếp cho tôi nơi nào đó tôi có thể nhận được một, đó sẽ là tuyệt vời.

Cảm ơn

SOLUTION Nhờ @HansPassant, tôi đã tìm thấy các giải pháp. Để gỡ lỗi dự án VB6 có chứa C# .NET assembly, bạn cần đăng ký .NET dll qua cả hai "regasm" và "gacutil", sau đó đảm bảo đóng và mở lại ứng dụng VB6 trước khi bạn bắt đầu gỡ lỗi .

+2

Nếu tôi hiểu chính xác câu hỏi của bạn, bạn muốn thực hiện gỡ lỗi từ phía VB 6 (tức là, từ IDE VB 6)? Điều đó sẽ không thể thực hiện được - trình sửa lỗi VB 6 hoạt động * chỉ * với mã VB 6. Nó không thể xử lý mã nguồn gốc ở tất cả, và nó chắc chắn không thể xử lý MSIL (.NET) mã kể từ đó thậm chí đã không được phát minh được nêu ra khi VB 6 ra. –

+0

Tôi đoán nó phụ thuộc vào khung .Net bạn sử dụng để biên dịch nó. Các ví dụ bạn đã tìm thấy là ngược lại kể từ khi các phiên bản studio trực quan cố gắng giữ cho khả năng tương thích ngược – luchosrock

+0

wow điểm tốt @CodyGray. Tôi đã không hình dung nó ra, bạn đang phải – luchosrock

Trả lời

0

Bạn không thể gỡ lỗi cùng nhau (dễ dàng) và bước từ mã VB6 đến mã C#. Tuy nhiên, bạn có thể gỡ lỗi từng cá nhân.

Gỡ lỗi mã VB6 có thể được thực hiện trong IDE sau khi biên dịch C# DLL và thêm nó làm tham chiếu đến dự án VB6.

Gỡ lỗi DLL với máy chủ VB6 là có thể trong Visual Studio bằng cách biên dịch dự án VB6 và sử dụng nó trong thuộc tính dự án là tệp thực thi để chạy.

Thật không may, điều này sẽ yêu cầu phải có ít nhất khuôn khổ của từng hoạt động trước.

+0

Khi bạn nói: "Việc gỡ lỗi mã VB6 có thể được thực hiện trong IDE trên chính nó sau khi biên dịch và tham khảo C# DLL." bạn có nghĩa là tạo tệp thi hành không? – Knoxxios

+0

@Knoxxios No, Biên dịch DLL. Để gỡ lỗi hoặc kiểm tra, bạn cần phải biên dịch khác. Do đó sự cần thiết cho một khuôn khổ cơ bản đầu tiên. Tôi đã cập nhật câu trả lời của mình một chút để làm rõ. – Deanna

+0

Oh trong trường hợp đó tôi đã thử điều đó. Tôi đã biên soạn C# assembly và tham chiếu nó trong dự án VB6. Tôi có thể gỡ lỗi C# dll bằng cách sử dụng đề xuất của bạn, nhưng không phải là dự án VB6. – Knoxxios

9

Đây không phải là vấn đề, VB6 sử dụng trình gỡ rối riêng của nó mà không cản trở bất kỳ trình gỡ rối nào khác, bao gồm trình gỡ rối cho mã C#.

Bạn bắt đầu từ dự án thư viện lớp C# của mình, đảm bảo nó được chọn làm dự án bắt đầu. Dự án + Thuộc tính, tab Gỡ lỗi. Chọn tùy chọn "Bắt đầu chương trình bên ngoài" và nhập đường dẫn đến IDE VB6. Thông thường c: \ program files \ microsoft visual studio \ vb98 \ vb6.exe. Đặt điểm ngắt trên phương thức bạn muốn gỡ lỗi.

Nhấn F5 và id VB6 sẽ bắt đầu chạy. Tải hoặc tạo dự án vb6 của bạn. Lưu ý cách bạn có thể thêm đường dẫn đến dự án .vbp trong bước trước để nó sẽ tự động tải dự án của bạn.

Bắt đầu gỡ lỗi dự án vb6 của bạn như thường lệ. Ngay sau khi nó bắt đầu sử dụng lớp C# [ComVisible] của bạn thì assembly C# của bạn sẽ được nạp. Và điểm ngắt sẽ nhấn khi mã vb6 của bạn gọi phương thức. Chuyển đổi qua lại khi cần. Lưu ý rằng bạn không thể thực hiện một bước từ mã vb6 đến mã C#, bạn phải thiết lập các điểm ngắt để làm cho trình gỡ lỗi dừng lại.

+0

Xin chào Hans, tôi vừa thử giải pháp của bạn. Lỗi với "Lỗi Tự động hóa Hệ thống không thể tìm thấy tệp được chỉ định" LƯU Ý: dll .net chứa một lớp và phương thức [Có thể thực hiện (đúng)]. Có một bản sao của C# assembly và .tlb trong cùng thư mục với dự án vb6. Và cuối cùng, hội đồng .Net được biên dịch bằng cách sử dụng VS2010. có cách nào cụ thể để nạp assembly C# trong VB6 không? – Knoxxios

+0

Đó là một câu hỏi hoàn toàn khác, hãy chắc chắn hỏi nó. Tóm lại, CLR không có lý do gì để nhìn vào thư mục dự án vb6, nó không biết gì về nó. Nó có trong thư mục regasm.exe/codebase và GAC cho assembly [ComVisible] và thư mục vb98 và GAC cho các assembly phụ thuộc. Sử dụng Fuslogvw.exe để xem điều đó. –

+0

Đẹp, tôi nghĩ rằng nó là có thể nhưng đã không thử nó vì vậy tôi không biết làm thế nào họ đang tương tác, do đó "không dễ dàng" :) – Deanna

3

Ah, điều kỳ diệu khi sử dụng .NET từ VB6 theo cách có thể gỡ lỗi.

  • trong dự án VB6 lập tùy chọn (đạt bằng cách sử dụng nút Options trên cửa sổ hộp thoại Project Make), chọn Compile để Mã Native, Không Optimization, và Tạo Symbolic Thông tin gỡ lỗi tùy chọn. Sau đó biên dịch dự án VB6 của bạn. Các tùy chọn này cho phép ánh xạ nhị phân nguồn VB6 thích hợp.
  • Chuyển đến Thuộc tính cấu hình ... Trang thuộc tính gỡ lỗi của giải pháp của bạn và thay đổi Bắt đầu hành động để chạy tệp thực thi VB6 của bạn.
  • Trong VS Solution Explorer, chuyển đến Tệp ... Thêm mục hiện có và điều hướng đến thư mục chứa mã nguồn VB6 mà bạn muốn gỡ lỗi. Bấm đúp vào tệp mã nguồn VB6 bạn muốn gỡ lỗi và cửa sổ nguồn sẽ mở trong VS cho phép bạn đặt các điểm ngắt trong mã nguồn VB6.
  • Đảm bảo rằng thư viện .NET của bạn có hàm khởi tạo mặc định công khai. Điều này là rất cần thiết.
  • Bây giờ cũng đặt bất kỳ điểm dừng C# nào bạn cần. Làm không bước vào mã .NET - điều này không hoạt động.
  • Khi bạn bắt đầu gỡ lỗi với VS, các điểm ngắt VB6 và C# của bạn sẽ bị đánh bình thường.
+0

Điều này Thật không may chỉ cho phép gỡ lỗi .Net dll – Knoxxios

+0

@Knoxxios, tôi đã thêm một dấu đầu dòng bổ sung giải thích cách gỡ lỗi Mã nguồn VB6 chi tiết. – RoadWarrior

+0

Tôi không nhận được một cửa sổ nguồn mở nơi tôi làm theo các bước của bạn, hy vọng bạn không có nghĩa là tôi có thể mở mã VB6 trong VS2010. – Knoxxios

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