gpt4 book ai didi

c# - 在 Python 脚本中使用 .Net (C#) dll

转载 作者:太空狗 更新时间:2023-10-30 00:57:41 27 4
gpt4 key购买 nike

我正在尝试将一个简单的 C# 命令行实用程序移植到 Python。 C# 程序使用一个名为 foobar.dll 的自定义 .Net dll,它通过 I2C 与一些实验室设备连接。 C#代码中dll的用法如下:

fooBar.fooProvider provider = new foobar.fooProvider()
fooBar.fooBarLib fooLib = new foobar.fooBarLib(provider, 0x80)
# used below ...
numFloat = fooLib.GetSomething()
# more python ...
fooLib.SetSomething(NumberAsAFloat)

我考虑过简单地使用 ctypes 来访问 dll,但我认为这不适用于 C#/.Net。由于我们实验室的限制,我需要使用 vanilla Python 发行版 + 附加模块(即不是 IronPython 或 CPython。)我查看了 Python for .NET,但我不确定这是否真的有效。我是 .Net 的新手,但在 Java、C++ 和 Python 方面有丰富的经验。有没有人遇到过这种情况,有好的解决方法吗?

编辑:

根据下面的解释,我在 python 解释器中导入了 clr,然后尝试导入 fooBar 库,结果如下:

Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 'Interop.AVMCIFCLib, Version=1.2.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
File name: 'Interop.AVMCIFCLib, Version=1.2.0.0, Culture=neutral, PublicKeyToken=null'
at System.Signature._GetSignature(SignatureStruct& signature, Void* pCorSig, Int32 cCorSig, IntPtr fieldHandle, IntPtr methodHandle, IntPtr declaringTypeHandle)
at System.Signature.GetSignature(SignatureStruct& signature, Void* pCorSig, Int32 cCorSig, RuntimeFieldHandle fieldHandle, RuntimeMethodHandle methodHandle, RuntimeTypeHandle declaringTypeHandle)
at System.Signature..ctor(RuntimeMethodHandle methodHandle, RuntimeTypeHandledeclaringTypeHandle)
at System.Reflection.RuntimeMethodInfo.get_Signature()
at System.Reflection.RuntimeMethodInfo.FetchNonReturnParameters()
at System.Reflection.RuntimeMethodInfo.GetParametersNoCopy()
at System.Reflection.RuntimePropertyInfo.GetIndexParameters()
at Python.Runtime.ClassManager.GetClassInfo(Type type)
at Python.Runtime.ClassManager.CreateClass(Type type)
at Python.Runtime.ClassManager.GetClass(Type type)
at Python.Runtime.ModuleObject.GetAttribute(String name, Boolean guess)
at Python.Runtime.ModuleObject.LoadNames()
at Python.Runtime.ImportHook.__import__(IntPtr self, IntPtr args, IntPtr kw)

WRN: Assembly binding logging is turned OFF.
To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.
Note: There is some performance penalty associated with assembly bind failure logging.
To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].

然后解释器崩溃了。这看起来像是构建不当的 dll,对吗?

最佳答案

Python for .NET工作得非常好,您可以从 Python 中执行 .NET 代码。 IronPython 也工作得很好,尽管反过来。您可以将 Python for .NET 视为可以执行 .NET 代码的 CPython 的扩展,而 IronPython 是允许执行 Python 代码的 CLR 的扩展。由于您的需要要求您使用原始 Python,因此 Python for .NET 应该可以工作。需要注意的是,在大多数情况下, Vanilla python 发行版 CPython。

关于c# - 在 Python 脚本中使用 .Net (C#) dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5783387/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com