通过python直接调用dll(python 方法调用)

  • 1、如何用python调用应用程序的.dll文件
  • 2、有谁知道python怎么调用c#的dll
  • 3、python怎么调用dll共享库

在Python中可以方便地使用os模块运行其他的脚本或者程序,这样就可以在脚本中直接使用其他脚本,或者程序提供的功能,而不必再次编写实现该功能的代码。

为了更好地控制运行的进程,可以使用win32process模块中的函数。

如果想进一步控制进程,则可以使用ctype模块,直接调用kernel32.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中一般有两种方法调用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)

原创文章,作者:T64J7,如若转载,请注明出处:https://www.506064.com/n/126308.html

汽车小知识 小米SU7 今日油价 油耗计算器 电耗计算器 购置税计算器 贷款计算器 保险计算器 交通违章代码 体育新闻
(0)
T64J7T64J7
上一篇 2024-10-03
下一篇 2024-10-03

相关推荐

  • rfactor简介

    rfactor是一款以模拟赛车为主题的游戏引擎,支持多人联机,也支持单人游戏。rfactor能够将赛车模型搭配真实的物理引擎,可将在赛车世界中的感受发挥到极致。rfactor提供给…

    编程 2024-10-04
  • 网易java工程师面经(java开发工程师面经)

    本文目录一览: 1、Java高级软件工程师会面试哪些问题 2、应聘JAVA工程师,面试官常问一些什么问题? 3、如果想在网易这样的公司工作应该学什么专业呢 Java高级软件工程师会…

    编程 2024-10-03
  • Java中的String List使用方法

    一、String List是什么 在Java中,String List是一种非常常用的数据结构,它是指一个由字符串组成的有序集合。和数组不同,String List可以根据需要动态…

    编程 2024-10-04
  • 详解JavaScript字符串split方法

    一、js字符串split方法 split()函数是JavaScript字符串对象的一个函数,用于将一个字符串分割成多个子字符串并返回一个数组,是字符串的常见操作之一。 二、js字符…

    编程 2024-10-04
  • 详解matlabunwrap

    一、什么是matlabunwrap matlabunwrap是Matlab中一个解决相位不连续问题的函数,一般用于相位图像的处理。通俗地说,就是将数据中的相位突变(2π)进行累积,…

    编程 2024-10-04
  • Linux Mount参数:实现文件系统挂载,设置挂载选项的特殊参数

    一、概述 Linux中mount命令用于挂载文件系统到指定目录,通过参数设置挂载选项,其中包括一些特殊参数,可以用于对挂载文件系统进行进一步的完善。 二、选项参数 常用挂载选项参数…

    编程 2024-10-04
  • alreadyexist的详解

    一、什么是alreadyexist alreadyexist是一个“查询是否存在”的API,它可以查询某个数据是否在数据库中存在。当一个用户或系统试图向数据库插入一条已经存在的记录…

    编程 2024-10-04
  • java的static静态存储,java静态类存储在哪里

    本文目录一览: 1、java中,静态变量存储在哪个区啊,堆还是栈啊,或者说其他地方,谢谢 2、java static变量存储在什么地方呢,别说什么静态存储池的,我需要实际和具体的回…

    编程 2024-10-25
  • c语言数组排序算法实现,c语言利用数组排序

    本文目录一览: 1、求C语言将数组元素大小排序!! 2、C语言数组排序方法 3、C语言数组排列怎么做? 求C语言将数组元素大小排序!! C语言将数组元素大小排序方法: 以下使用的是…

    编程 2024-10-04
  • Jupyter Notebook代码补全

    一、代码补全的意义 1、减少语法错误和拼写错误 2、提高编写效率,降低编写代码的时间和精力消耗 3、减少对文档或互联网的依赖,提高独立编程的能力 二、内置代码补全 Jupyter …

    编程 2024-10-22

发表回复

登录后才能评论