2010-05-22 83 views
8

Tôi đang cố gắng sử dụng tệp lame_enc.dll từ LAME trong dự án C# nhưng thêm điều dường như không thể.Thêm C++ DLL vào dự án C#

Tôi tiếp tục nhận được lỗi cho biết rằng không thể thêm tham chiếu và vui lòng kiểm tra xem có thể truy cập được không, thành phần hợp lệ hoặc thành phần COM.

Tôi không có kinh nghiệm C++, mặc dù tôi muốn sử dụng chức năng này. Ngay bây giờ tôi đang sử dụng Process từ các.NET framework để gọi lame.exe và làm công cụ, nhưng tôi muốn biết nếu có một cách khác.

+0

Để thêm vào những ý kiến ​​khác , nếu bạn phải thực hiện một số loại trình bao bọc, nó có thể hữu ích để đi toàn bộ-hog, và sử dụng một wrapper COM-callable. Bằng cách này bạn có thể gọi nó từ, nói, jscript là tốt :) Và nếu bạn tìm kiếm trên web cho trình bao bọc LAME COM, bạn sẽ nhận được câu trả lời như sau: http://www.mail-archive.com/[email protected] tuhs.org/msg02219.html –

Trả lời

6

Bạn phải sử dụng P/Invoke gọi API không được quản lý từ mã được quản lý.

8

Bạn chỉ có thể thêm các hội đồng được quản lý làm tham chiếu đến một dự án được quản lý. Những gì tôi thường làm trong tình huống này là thêm nó như là nguồn cấp dữ liệu thay vì với các cài đặt "sao chép cục bộ". Bằng cách đó, DLL được gắn kết và triển khai với dự án của bạn. Sau đó tôi sử dụng DllImport để nhận API theo cách thủ công từ tệp DLL đó.

3

Bạn sẽ cần sử dụng chức năng Gọi để gọi trong dll bản địa của bạn. Tuy nhiên, bạn sẽ chỉ có thể gọi các hàm đã được xuất dưới dạng "C".

Bạn có thể sử dụng một công cụ như "PInvoke Interop Assistant" sẽ giúp bạn khi làm việc ra chữ ký cuộc gọi PInvoke để thực hiện cuộc gọi từ C# để dll mẹ đẻ của bạn:

http://clrinterop.codeplex.com/releases/view/14120

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