问答文章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
临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 黑客攻击报案有用吗 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 黑枸杞用什么温度的水泡最好 黑枸杞用多少温度水冲泡? 连信朋友圈发的视频删了怎么找回? 黑枸杞泡水的温度,是用开水泡还是冷水泡 微信发过的朋友圈视频,后期显示不存在,怎么恢复? 泡黑枸杞第二次续杯水温有要求吗? 在微信视频号上面看了一个视频,转发朋友圈后,误删了怎么再找回?