如何將一個winDLL導入python並能夠使用它的所有功能?它只需要雙打和字符串。Python導入dll
13
A
回答
13
你已經標記了問題ctypes,所以它聽起來像你已經知道答案。
ctypes tutorial非常好。一旦你閱讀並理解你可以輕鬆完成。
例如:
>>> from ctypes import *
>>> windll.kernel32.GetModuleHandleW(0)
486539264
而且從我自己的代碼示例:
lib = ctypes.WinDLL('mylibrary.dll')
#lib = ctypes.WinDLL('full/path/to/mylibrary.dll')
func = lib['myFunc']#my func is double myFunc(double);
func.restype = ctypes.c_double
value = func(ctypes.c_double(42.0))
2
使用Cython,既可以訪問DLL,也可以爲它們生成Python綁定。
3
我張貼我的經驗。首先,儘管我把所有的東西都拼湊在一起,但是導入C#dll很簡單。我所採取的方式是:
1)安裝本NuGet包(我不是老闆,只是非常有用),以建立一個非託管的DLL:https://sites.google.com/site/robertgiesecke/Home/uploads/unmanagedexports
2)你的C#DLL的代碼是這樣這樣的:
using System;
using RGiesecke.DllExport;
using System.Runtime.InteropServices;
public class MyClassName
{
[DllExport("MyFunctionName",CallingConvention = CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.LPWStr)]
public static string MyFunctionName([MarshalAs(UnmanagedType.LPWStr)] string iString)
{
return "hello world i'm " + iString
}
}
3)你的Python代碼是這樣的:
import ctypes
#Here you load the dll into python
MyDllObject = ctypes.cdll.LoadLibrary("C:\\My\\Path\\To\\MyDLL.dll")
#it's important to assing the function to an object
MyFunctionObject = MyDllObject.MyFunctionName
#define the types that your C# function return
MyFunctionObject.restype = ctypes.c_wchar_p
#define the types that your C# function will use as arguments
MyFunctionObject.argtypes = [ctypes.c_wchar_p]
#That's it now you can test it
print(MyFunctionObject("Python Message"))
相關問題
- 1. Python 2.5導入dll AttributeError
- 2. 導入C++ DLL在Python
- 3. Python dll擴展導入
- 4. dll導入Python中的錯誤答案
- 5. 如何將C#dll導入python
- 6. 導入.dll -s
- 7. 導入msado15.dll
- 8. Labview的DLL導入
- 9. 從DLL導入表中獲取用戶導入的DLL
- 10. Python導入錯誤「DLL加載失敗」| Python
- 11. 將dll導入另一個dll C++
- 12. 未定義Webpack dll導入
- 13. C++到C#DLL導入ReadImage
- 14. 錯誤導入MSADO15.DLL
- 15. 在Visual Studio中導入Dll
- 16. 在vba中導入Delphi dll
- 17. pInvoke C#DLL導入問題
- 18. 導入C++ DLL在C#中
- 19. 將.dll導入到Qt中
- 20. 導入C DLL函數
- 21. 在C中導入C++ dll#
- 22. 如何導入libusb dll
- 23. Dll在fastreport中導入
- 24. 在C中導入Fortran dll#
- 25. 問題導入C++ DLL
- 26. 如何導入這個DLL
- 27. 如何從dll導入類?
- 28. Win32 DLL導入問題(DllMain)
- 29. 導入和調用COM DLL
- 30. 在java中導入dll庫
你有什麼,到目前爲止,怎麼不工作? – 2011-03-10 00:01:02
與這個問題重複嗎? http://stackoverflow.com/questions/252417/how-can-i-use-a-dll-from-python – payne 2011-03-10 00:01:34