如何导出C#方法?

发布于 2024-08-18 03:52:35 字数 157 浏览 3 评论 0原文

我们如何导出 C# 方法?

我有一个 dll,我想通过 ctypes 模块在 Python 语言中使用它的方法。 因为我需要使用 ctypes 模块,所以我需要导出 C# 方法,以便它们在 Python 中可见。

那么,如何导出 C# 方法(就像在 C++ 中一样)?

How can we export C# methods?

I have a dll and I want to use its methods in the Python language with the ctypes module.
Because I need to use the ctypes module, I need to export the C# methods for them to be visible in Python.

So, how can I export the C# methods (like they do in C++)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

浮云落日 2024-08-25 03:52:35

对于普通的 Python 实现(“CPython”),您不能,至少不能直接这样做。

您可以使用 C++/CLI 围绕我们的 C# 方法编写本机 C 包装器,并从 Python 调用这些包装器。

或者,您可以尝试 IronPython。这使您可以运行 Python 代码并调用任何 .Net 语言(包括 C#)的代码。

With the normal Python implementation ("CPython"), you can't, at least not directly.

You could write native C wrappers around our C# methods using C++/CLI, and call these wrappers from Python.

Or, you could try IronPython. This lets you run Python code and call code in any .Net language, including C#.

夏花。依旧 2024-08-25 03:52:35

那是不可能的。如果需要 DLL 导出,则需要使用 C++/CLI 语言。例如:

public ref class Class1 {
public:
  static int add(int a, int b) {
      return a + b;
  }
};

extern "C" __declspec(dllexport) 
int add(int a, int b) {
  return Class1::add(a, b);
}

该类也可以用 C# 编写。 C++/CLI 编译器为导出发出一个特殊的 thunk,以确保加载 CLR 并将执行切换到托管模式。这并不快。

用 C# 编写 [ComVisible(true)] 代码是另一种可能性。

That's not possible. If you need DLL exports you'll need to use the C++/CLI language. For example:

public ref class Class1 {
public:
  static int add(int a, int b) {
      return a + b;
  }
};

extern "C" __declspec(dllexport) 
int add(int a, int b) {
  return Class1::add(a, b);
}

The class can be written in C# as well. The C++/CLI compiler emits a special thunk for the export that ensures that the CLR is loaded and execution switches to managed mode. This is not exactly fast.

Writing [ComVisible(true)] code in C# is another possibility.

寂寞陪衬 2024-08-25 03:52:35

将 .NET/C# 对象公开给非托管代码(如 Python)的“正常”方法是为 C# DLL(.NET 程序集)创建 COM 可调用包装器,并使用 Python 的 COM/OLE 支持来调用它。要创建 COM 可调用包装器,请使用 tlbexp 和/或 regasm 命令行实用程序。

然而,显然,这并没有提供 C/DLL 风格的 API。

The "normal" way of exposing .NET/C# objects to unmanaged code (like Python) is to create a COM-callable wrapper for the C# DLL (.NET assembly), and call that using Python's COM/OLE support. To create the COM-callable wrapper, use the tlbexp and/or regasm command-line utilities.

Obviously, however, this does not provide a C/DLL-style API.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文