2012-04-26 36 views
6

Tôi đang cố gắng tạo ra một sự tích hợp giữa một chương trình dựa trên Lisp của bên thứ 3 (Hãy gọi nó là ABC) và một chương trình C# mà tôi đã viết (hãy gọi nó là DEF). Vấn đề là ABC chỉ có thể gọi các hội đồng được tạo ra trong C hoặc Fortran. Vì vậy, tôi bắt đầu học C, và tôi có bài kiểm tra "hello world" để làm việc, trong đó ABC gọi dll C của tôi và nhận "hello world" đổi lại. Tôi đã cố gắng gọi dll DEF của tôi từ mã C bằng cách sử dụng tải rõ ràng và GetProcAddress. Nó làm việc nếu tôi gọi một dll C khác, nhưng không phải là một C# dll. Bây giờ tôi tự hỏi nếu tôi phải học C++ và gọi C# từ C++ để tạo ra chuỗi gọi đẹp này:Làm cách nào để gọi các phương thức trong C# dll từ mã C của tôi?

ABC -> C -> C++ -> DEF (C#) -> C++ -> C -> ABC

Nếu đó là cách duy nhất, bất cứ ai có thể giúp tôi với một số ví dụ, vv?

+1

Bạn đã đăng ký C# dll cho COM interop chưa? Tôi đã thực hiện nó trong quá khứ, điều đó là có thể. – SouthShoreAK

+0

Đừng quên đánh dấu câu hỏi của bạn được trả lời nếu nó là (kiểm tra móc dưới nút downvote của câu trả lời). – sschrass

Trả lời

2

Sử dụng this project để xuất các hàm C# làm điểm nhập gốc.

+0

Tôi thực sự có điều này để làm việc, cảm ơn rất nhiều! – AndersJH

3

Khi bạn tạo một hội đồng .NET, bạn có thể đặt hộp kiểm để có lắp ráp được đăng ký cho COM interop. Điều này sẽ cho phép bạn truy cập vào nó từ bất kỳ ngôn ngữ nào có thể gọi COM. (C có thể không nó? Đã lâu rồi kể từ khi tôi chạm C hoặc C++.)

Thuộc tính cấu hình -> Xây dựng trang thuộc tính dự án của bạn. Tìm "Đăng ký COM Interop".

+0

Điều này không hoạt động. C vẫn không thể tìm thấy địa chỉ thủ tục trong dll. – AndersJH

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