问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

有谁知道python怎么调用c#的dll

发布网友 发布时间:2022-04-23 09:31

我来回答

4个回答

懂视网 时间:2022-04-18 07:34

在python中某些时候需要C做效率上的补充,在实际应用中,需要做部分数据的交互。使用python中的ctypes模块可以很方便的调用windows的dll(也包括linux下的so等文件),下面将详细的讲解这个模块(以windows平台为例子),当然我假设你们已经对windows下怎么写一个DLL是没有问题的。

引入ctypes库

from ctypes import *

假设你已经有了一个的DLL(名字是add.dll),且该DLL有一个符合cdecl(这里强调调用约定是因为,stdcall调用约定和cdecl调用约定声明的导出函数,在使用python加载时使用的加载函数是不同的,后面会有说明)调用约定的导出函数Add。

热心网友 时间:2022-04-18 04:42

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加密方法。

热心网友 时间:2022-04-18 06:00

Python本身无法直接调用C# DLL(只可调用C/C++DLL),需要通过IronPython来调用。
http://lovesoo.org/ironpython-diao-yong-c-dll-han-shu-fang-fa.html

热心网友 时间:2022-04-18 07:35

查一下comtype的资料,用c#写com组建调用
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
巧师傅榴莲千层蛋糕(6寸500g)-适用对象 巧师傅 榴莲千层蛋糕 6寸 500g-马来西亚苏丹王榴莲肉,口感鲜甜软糯_百... 巧师傅榴莲千层蛋糕500g-精选苏丹王榴莲果肉,口感浓郁 巧师傅苏丹王榴莲千层蛋糕-适用对象 阿卡丽和卡特琳娜,哪一个比较好。 英雄联盟阿卡丽和卡特琳纳哪个比较好…为什么? 求大神分析 阿卡丽和卡特琳娜单挑 谁会赢? 河北5+3临床医学有哪些学校 ...块数比20多,比40少,5块5块地数正好数完,2块2块地数也正好数完?_百... ...比20小,它3个3个数或4个4个数都正好数完,这个数是多少..._百度知... python 调用DLL的问题 python怎么调用dll共享库 海蛎煎蛋的最简单做法 梦见自己骑着摩托车飞奔停不下来是怎么回事? python3,64位的,怎么样调用32位的DLL最方便 女人梦见骑摩托车载个男人在路上跑? 海蛎煎怎么做? 生蚝煎鸡蛋怎么做 “姝嫚”是什么意思? 海砺煎蛋怎么做? 海蛎煎的做法是什么? 最近老是梦见自己开摩托车和小车在路上开车轮掉了,刹车坏了,人没事就醒了,这是怎么回事啊 生蚝煎蛋怎么做呢? 蛋煎生蚝的做法,蛋煎生蚝怎么做 福建海蛎煎蛋的做法 梦见自己做摩托车行驶在漆黑的路上? 鸡蛋煎生蚝的做法 海蛎煎蛋怎么做? 在EXCEL中,if函数怎样用 excel里面的逻辑函数if,怎么表达以下条件? 如何用python调用.net中的dll python调用外部C#库的dll文件 python调dll里的类,例如dll中有类cobject,类方法add,怎么调这个类方法呢... 请教python调用dll动态库的传参问题 python调用dll中的函数时报错 python调用dll怎么传入一个指针接收结果? 求助一个python调用c程序dll的问题 创建 可以被python调用的 dll python写了个小程序调用dll但是打开后,其他程序无法加载该dll 如何使用python调用c++ dll python 调用 C++ 编译的 dll Python如何调用dll里带指针的指针的函数 python调用comtypes,为什么报错"加载类型库/DLL 黑枸杞用什么温度的水泡最好 黑枸杞用多少温度水冲泡? 连信朋友圈发的视频删了怎么找回? 黑枸杞泡水的温度,是用开水泡还是冷水泡 微信发过的朋友圈视频,后期显示不存在,怎么恢复? 泡黑枸杞第二次续杯水温有要求吗? 在微信视频号上面看了一个视频,转发朋友圈后,误删了怎么再找回?