本文目录一览:
- 1、python怎么调用dll共享库
- 2、如何用python调用应用程序的.dll文件
- 3、python里面如何释放DLL文件
- 4、有谁知道python怎么调用c#的dll
- 5、python 调用 C++ 编译的 dll
- 6、python 调用DLL的问题
python怎么调用dll共享库
可以的,python中一般有两种方法调用DLL中的函数。1.直接使用函数名,函数名可以用dependencywalker等工具查看。(这个工具在vc或者vs的工具包中)[python]viewplaincopyimportctypesdll=CTYPES.CDLL("test.dll")res=test(3,4)2.使用Ordinal,Ordinal可以用dependencywalker等工具查看。[python]viewplaincopyimportctypesdll=CTYPES.CDLL("test.dll")res=dll[1](3,4)
如何用python调用应用程序的.dll文件
在python中调用dll文件中的接口比较简单,实例代码如下:
如我们有一个test.dll文件,内部定义如下:
extern "C"
{
int __stdcall test( void* p, int len)
{
return len;
}
python里面如何释放DLL文件
调用dll的代码采用如下顺序:
dll = CDLL(dllPath)
update_out = UpdateParamStruct()
dll.SeUpdaterGetParam(case.updateType, byref(update_out))
win32api.FreeLibrary(dll._handle)
这样就可以在执行完后,dll文件不会处于占用的状态了~
有谁知道python怎么调用c#的dll
1、首选运行工具 makepy.py。
2、这样就可以查看 C# dll的 com导出的 py文件了。
Python编程makepy.py代码如下:
# -*- coding: mbcs -*-
# Created by makepy.py version 0.5.00
# By python version 2.5.4 (r254:67916, Dec 23 2008, 15:10:54) [MSC v.1310 32 bit (Intel)]
# From type library 'XGSharpLib.tlb'
""""""
makepy_version = '0.5.00'
python_version = 0x20504f0
import win32com.client.CLSIDToClass, pythoncom, pywintypes
import win32com.client.util
from pywintypes import IID
from win32com.client import Dispatch
# The following 3 lines may need tweaking for the particular server
# Candidates are pythoncom.Missing, .Empty and .ArgNotFound
defaultNamedOptArg=pythoncom.Empty
defaultNamedNotOptArg=pythoncom.Empty
defaultUnnamedArg=pythoncom.Empty
CLSID = IID('{B38EF2FA-4639-40BC-B97C-7908CED04FF9}')
MajorVersion = 1
MinorVersion = 0
LibraryFlags = 8
LCID = 0x0
from win32com.client import DispatchBaseClass
class IComXGSharpLib(DispatchBaseClass):
CLSID = IID('{D1965A94-0271-4C48-8AF6-2A56E256808B}')
coclass_clsid = IID('{2302D874-18FE-4281-B329-9517F1BC8311}')
def EncryptMd5(self, orignPwd=defaultNamedNotOptArg):
# Result is a Unicode object
return self._oleobj_.InvokeTypes(2, LCID, 1, (8, 0), ((8, 1),),orignPwd
)
def EncryptSHA1(self, orignPwd=defaultNamedNotOptArg):
# Result is a Unicode object
return self._oleobj_.InvokeTypes(1, LCID, 1, (8, 0), ((8, 1),),orignPwd
)
_prop_map_get_ = {
}
_prop_map_put_ = {
}
class _Object(DispatchBaseClass):
CLSID = IID('{65074F7F-63C0-304E-AF0A-D51741CB4A8D}')
coclass_clsid = IID('{2302D874-18FE-4281-B329-9517F1BC8311}')
def Equals(self, obj=defaultNamedNotOptArg):
return self._oleobj_.InvokeTypes(1610743809, LCID, 1, (11, 0), ((12, 1),),obj
)
def GetHashCode(self):
return self._oleobj_.InvokeTypes(1610743810, LCID, 1, (3, 0), (),)
# Result is of type _Type
def GetType(self):
ret = self._oleobj_.InvokeTypes(1610743811, LCID, 1, (13, 0), (),)
if ret is not None:
# See if this IUnknown is really an IDispatch
try:
ret = ret.QueryInterface(pythoncom.IID_IDispatch)
except pythoncom.error:
return ret
ret = Dispatch(ret, u'GetType', '{BCA8B44D-AAD6-3A86-8AB7-03349F4F2DA2}')
return ret
_prop_map_get_ = {
"ToString": (0, 2, (8, 0), (), "ToString", None),
}
_prop_map_put_ = {
}
# Default property for this class is 'ToString'
def __call__(self):
return self._ApplyTypes_(*(0, 2, (8, 0), (), "ToString", None))
def __unicode__(self, *args):
try:
return unicode(self.__call__(*args))
except pythoncom.com_error:
return repr(self)
def __str__(self, *args):
return str(self.__unicode__(*args))
def __int__(self, *args):
return int(self.__call__(*args))
from win32com.client import CoClassBaseClass
# This CoClass is known by the name 'XGSharpLib.Security'
class Security(CoClassBaseClass): # A CoClass
CLSID = IID('{2302D874-18FE-4281-B329-9517F1BC8311}')
coclass_sources = [
]
coclass_interfaces = [
IComXGSharpLib,
_Object,
]
default_interface = IComXGSharpLib
IComXGSharpLib_vtables_dispatch_ = 1
IComXGSharpLib_vtables_ = [
(( u'EncryptSHA1' , u'orignPwd' , u'pRetVal' , ), 1, (1, (), [ (8, 1, None, None) ,
(16392, 10, None, None) , ], 1 , 1 , 4 , 0 , 28 , (3, 0, None, None) , 0 , )),
(( u'EncryptMd5' , u'orignPwd' , u'pRetVal' , ), 2, (2, (), [ (8, 1, None, None) ,
(16392, 10, None, None) , ], 1 , 1 , 4 , 0 , 32 , (3, 0, None, None) , 0 , )),
]
_Object_vtables_dispatch_ = 1
_Object_vtables_ = [
(( u'ToString' , u'pRetVal' , ), 0, (0, (), [ (16392, 10, None, None) , ], 1 , 2 , 4 , 0 , 28 , (3, 0, None, None) , 0 , )),
(( u'Equals' , u'obj' , u'pRetVal' , ), 1610743809, (1610743809, (), [ (12, 1, None, None) ,
(16395, 10, None, None) , ], 1 , 1 , 4 , 0 , 32 , (3, 0, None, None) , 0 , )),
(( u'GetHashCode' , u'pRetVal' , ), 1610743810, (1610743810, (), [ (16387, 10, None, None) , ], 1 , 1 , 4 , 0 , 36 , (3, 0, None, None) , 0 , )),
(( u'GetType' , u'pRetVal' , ), 1610743811, (1610743811, (), [ (16397, 10, None, "IID('{BCA8B44D-AAD6-3A86-8AB7-03349F4F2DA2}')") , ], 1 , 1 , 4 , 0 , 40 , (3, 0, None, None) , 0 , )),
]
RecordMap = {
}
CLSIDToClassMap = {
'{D1965A94-0271-4C48-8AF6-2A56E256808B}' : IComXGSharpLib,
'{2302D874-18FE-4281-B329-9517F1BC8311}' : Security,
'{65074F7F-63C0-304E-AF0A-D51741CB4A8D}' : _Object,
}
CLSIDToPackageMap = {}
win32com.client.CLSIDToClass.RegisterCLSIDsFromDict( CLSIDToClassMap )
VTablesToPackageMap = {}
VTablesToClassMap = {
'{D1965A94-0271-4C48-8AF6-2A56E256808B}' : 'IComXGSharpLib',
'{65074F7F-63C0-304E-AF0A-D51741CB4A8D}' : '_Object',
}
NamesToIIDMap = {
'_Object' : '{65074F7F-63C0-304E-AF0A-D51741CB4A8D}',
'IComXGSharpLib' : '{D1965A94-0271-4C48-8AF6-2A56E256808B}',
}
3、举例:Python调用C# dll中的 MD5加密方法。
python 调用 C++ 编译的 dll
困难啊。通常调用C编写的DLL就比较难。如果C++更难。如果说在linux还过得去。那么在linux下还得去。在windows就更难了。标准不一样。
建议你直接使用cython,轻松就搞定了。ctypes只是偶尔才用一下。
往往调用失败与dll的封装格式,编译的方法,参数,版本都有关系。c++的函数命名方式也不同于C,似乎前面要加下划线。
python 调用DLL的问题
那就是有内存泄露。内存没有释放。原因可能是多种。一种是你的DLL或者是AntiVC出了错。另外一种是ctypes出错。其中返回的内容没有释放内存。也许只有10个字节,但是长期积累还是很可观。
如果解决这个问题,就是稳定的程序,怎么用都不会坏。
还有一个保守的办法。如果你调用DLL的频率不是特别快。比如每秒不超过2000次。那么你可以将这个功能封装在一个服务进程里。线程再通过接口去访问。该 服务进程即使内存溢出崩溃了。也会自动重新启动。这样你的20个线程基本上只需要重试几次,等服务进程重新启动完成后,就可以获得结果。基本不影响使用。操作系统也很安全。因为进程退出后,所有的遗留错误都会清空。