aF.*_*aF. 22 .net c# python cpython python.net
如何在python中加载ac#dll?
我是否必须在c#文件中添加一些额外的代码?(比如在c ++文件中导出)
我不想使用IronPython.我想将模块导入Python!
Vin*_*ent 22
Python for Python 包和Python实现IronPython现在以相同的方式工作.
C#DLL的示例MyDll.dll
:
import clr
clr.AddReference('MyDll')
from MyNamespace import MyClass
my_instance = MyClass()
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅此帖子.
如果您不想使用Python .NET或IronPython等解决方案,可以实现 C++/CLI 包装器并使用Python ctypes来加载它。例如:
C++/CLI 库 CallCSharp:
extern "C" {
__declspec(dllexport) void foo()
{
// here you could use managed and unmanaged code
Console.WriteLine("Hello, C# world...");
}
Run Code Online (Sandbox Code Playgroud)
Python 脚本:
from ctypes import cdll
lib = cdll.LoadLibrary("./CallCSharp.dll")
lib.foo()
Run Code Online (Sandbox Code Playgroud)
有关使用 ctypes 的更多示例可以在此处找到。
我强烈建议阅读此博客:http://pragmateek.com/if-your-plumbing-doesnt-work-youre-just-not-using-enough-pipes/#more-1745
它还可以处理当 C++/CLI 包装器调用另一个程序集中的代码时出现的问题(然后您会从 Python 脚本中得到类似 WindowsError: [Error -532462766] Windows Error 0xE0434352 的信息)。
这是为了回答您问题的第二部分,请尝试使DLL COM可见。
通过使用
[ComVisible(true)]
Run Code Online (Sandbox Code Playgroud)
好的IronPython是Python语言的.net实现。该技术将在到达时使用.net 4.0的DLR,因此IronPython将具有更多的动态性(就是这样)。(如果您是Python专家,用英语来说,使用IronPython会让您有宾至如归的感觉)
因此,您可以选择IronPython,如果这样做,则可以跳过COM可见部分。由于两者(C#,Iron Python)都位于.Net下
归档时间: |
|
查看次数: |
53621 次 |
最近记录: |