2010-01-16 37 views
15

làm thế nào tôi có thể tải một dll C# trong python?Làm thế nào để tải một dll C# trong python?

Tôi có phải đặt thêm một số mã trong các tệp C# không? (như xuất tệp C++)

Tôi không muốn sử dụng IronPython. Tôi muốn nhập một mô-đun vào Python!

+0

Bạn có thể muốn thêm một chút làm rõ. Chúng ta đang nói về * CPython * hay * IronPython *? –

+0

Tôi muốn nhập một mô-đun bằng Python (không phải là IronPython rồi ..) –

+0

Bạn sẽ gặp khó khăn. Một C# DLL được viết bằng CIL và không phải là python, cũng không thể đọc được bởi python. Bạn đang đi hoặc là đi ra đầy đủ. NET và sử dụng IronPython hoặc bị đau đớn của việc sử dụng COM. Không có cách nào bạn có thể sử dụng một mô-đun python bản địa? –

Trả lời

4

Điều này là để trả lời phần thứ hai của câu hỏi của bạn Hãy thử làm cho DLL COM hiển thị.

bằng

[ComVisible(true)] 

Ok IronPython là một implemenatation .net của ngôn ngữ Python Công nghệ này sẽ sử dụng các DLR của .net 4.0 khi nó đến, nhờ đó IronPython sẽ phải năng động hơn (là một từ). (Trong tiếng Anh nếu bạn là một guru Python, bạn sẽ cảm thấy ở nhà khi bạn sử dụng IronPython)

Vì vậy, bạn cũng có thể chọn IronPython, nếu bạn làm điều đó bạn có thể bỏ qua phần hiển thị COM. Kể từ khi cả hai (C#, Iron Python) đang được Net

http://ironpython.net/

Visit here for a sample C# DLL which is visible to COM

+0

Bây giờ tôi đã thấy Ironpython tôi đã hiểu nó là gì. Tôi không muốn điều đó. Tôi muốn nhập khẩu một mô-đun trong python: P –

+0

Bạn có nghĩa là nhập khẩu (port) C# mã để Python hoặc nhập một C# dll để Python –

+0

Nhập khẩu và sử dụng chức năng từ một C# Dll trong Python –

16

Gói Python for.NET và triển khai Python IronPython hiện hoạt động theo cùng một cách.

Ví dụ cho một C# DLL MyDll.dll:

import clr 
clr.AddReference('MyDll') 
from MyNamespace import MyClass 
my_instance = MyClass() 

Xem this post để biết thêm chi tiết.

+1

intall nó trước bằng cách 'pip3 install pythonnet' – Felix

1

Nếu bạn không muốn sử dụng các giải pháp như Python .NET hoặc IronPython, bạn có thể triển khai trình bao bọc C++/CLI và sử dụng các mẫu Pythons ctypes để tải nó. Ví dụ:

C++/CLI thư viện CallCSharp:

extern "C" { 
    __declspec(dllexport) void foo() 
    { 
     // here you could use managed and unmanaged code 
     Console.WriteLine("Hello, C# world..."); 
    } 

Các Python script:

from ctypes import cdll 
lib = cdll.LoadLibrary("./CallCSharp.dll") 
lib.foo() 

tôi rất recomment đọc blog này: http://pragmateek.com/if-your-plumbing-doesnt-work-youre-just-not-using-enough-pipes/#more-1745

Nó cũng xử lý việc vấn đề phát sinh khi trình bao bọc C++/CLI gọi mã trong một assembly khác (bạn sẽ nhận được một thứ giống như Wind owsError: [Error -532462766] Lỗi Windows 0xE0434352 từ tập lệnh Python của bạn rồi).

+0

Điều này có hoạt động trên Mono và .NET Core không? – denfromufa

+0

Không biết. Và tôi đã bỏ qua cách tiếp cận đó, tôi đã không nhận được tải hội đồng tham chiếu đang chạy. Tôi sẽ cố gắng tìm ra Python .NET. – anhoppe

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