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

作者&投稿:箕馨 (若有异议请与网页底部的电邮联系)
python调用外部C#库的dll文件~

import clrimport Systemclr.AddReferenceToFile("SimpleHash.dll")from Common import *class HashPy(SimpleHash): def __init__(self): pass def HashCalc(self,arg1,arg2): #str to byte[] arg1=System.Text.Encoding.Default.GetBytes(arg1) arg2=System.Text.Encoding.Default.GetBytes(arg2) return SimpleHash.HashCalc(self,arg1,arg2)audiobuff='1234567812345678123456781234567812345678123456781234567812345678\123456781234567812345678123456781234567812345678123456781234567812345678\123456781234567812345678123456781234567812345678123456781234567812345678\1234567812345678123456781234567812345678123456781234567812345678'key='12345678'print HashPy().HashCalc(audiobuff,key)python ctype只能调用c/c++. 你要调用c#的dll 要用IronPython。如上面的例子

在python中调用dll文件中的接口比较简单,实例代码如下:
如我们有一个test.dll文件,内部定义如下:
extern "C"
{

int __stdcall test( void* p, int len)
{
return len;
}

}

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/C++DLL),需要通过IronPython来调用。
http://lovesoo.org/ironpython-diao-yong-c-dll-han-shu-fang-fa.html

查一下comtype的资料,用c#写com组建调用


有了解python的吗?
Python这门语言的魅力和影响力已经远超Java、C、C++等编程语言前辈,2018年主流的十大编程语言中,Python排名第一。被广大使用者誉为“更美好”编程语言。也常常被昵称为“胶水语言”,Python这门语言拥有很多的优势,看完之后你会发现学习Python还是很不错的。Python语言的优点第一个就是简单易学,简单到...

python是什么意思?
Python是一种跨平台的计算机程序设计语言。是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。Python的创始人为荷兰人吉多·范罗苏姆(GuidovanRossum)。1989年圣诞节...

python是什么语言
Python是用C语言。Python由荷兰国家数学与计算机科学研究中心的吉多·范罗苏姆于1990年代初设计,作为一门叫做ABC语言的替代品。Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言,随着版本的不断...

python是什么?
python被大家称作为蟒蛇。是一种跨平台的计算机程序设计语言。 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。为什么那么多人学习python?很多人学习python,因为它足够...

Python指的是什么语言
很多朋友想知道Python是什么语言,下面就让我们来看看吧。Python语言 Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,Python被应用于多个领域,拥有最成熟的程序包资源库之一,开始被设计用于编写自动化脚本(shell),后来经过版本的不断更新和语言新功能的添加,多被用于独立的、大型...

有人知道python是干什么用的吗?
Python是一种面向对象的解释性语言.它是一种高级编程语言,也就是说它尽可能将用户与底层操作系统隔离.然而,与其他解释性语言不同的是支持对操作系统的底层访问.因而,通常将划分在处于VB或PERL到系统级的C语言之间的位置.虽然象PERL,TCL和其他一些语言一样,Python被认为是一种解释性语言,但是它有编译的...

谁知道python的结果 为什么是 2,3?
这是列表切片,会返回一个列表。其中list2[1:3]中:前面的1指定开始索引(包括),:后面的3指定结束索引(不包括)。因为列表的索引是从0开始的,所以,1:3就是返回索引为1以及索引为2的元素构成的列表,也就是原列表list2的第2个和第3个元素构成的列表,当然是[2,3]。

python是什么 创始人是谁呢
1. Python是一种跨平台的计算机程序设计语言,它是一种面向对象的动态类型语言。最初设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多地被用于独立的、大型项目的开发。2. Python的创始人为荷兰程序员吉多·范罗苏姆(Guido van Rossum)。在1989年圣诞节期间,Guido...

python是什么语言
python的中文名称是蟒蛇。Python是一种计算机程序设计语言。是一种动态的、面向对象的脚本语言,最初是用来编写自动化脚本的,随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。Python特点主要有以下几个方面:1、简单:Python是一种代表简单主义思想的语言。阅读一个良好的...

Python如何入门
很多朋友想知道Python如何入门,下面就让我们来看看吧。Python是一门简单易学,通俗易懂,容易上手的编程语言,想入门首先得学习Python基础语法,学习Linux的基本命令,数据库的基本操作等基本内容,等这些东西熟练了,就基本算入门了。Python工程师是干什么的 Python涉及的领域非常广泛,在处理方面包括系统运维...

城固县13728533405: C# 如何调用Python文件 -
濮丁吉粒: 1. 安装IronPython 到http://ironpython.codeplex.com/下载IronPython.安装下载下来的安装包(要先装VS啊).2. 创建项目 创建一个C#的控制台应用程序.添加引用: 浏览到IronPython的安装目录中,添加对IronPython.dll,Microsoft.Scripting.dll ...

城固县13728533405: C#程序如何调用Python程序 -
濮丁吉粒: 这个是不是调用啊.这个仅仅是执行.如果是说调 用的话.python for .net和iron python都支持.net调 用python的模块.不过仅仅是执行的话也容易.假设你的start.py是一个可以执行的程序.是执行不是调用.不是import.那么你不需要set ...

城固县13728533405: C#如何调用python写的webservice -
濮丁吉粒: 调什么的webservice都是一样的 你在C#创建一个工程以后,在Service References文件夹,右键添加Add Service References Address中输入这个地址 然后点GO 如果地址正确,远程服务正常,下面就会出现这个调用的类和方法.底下的Namespace里面输入这个调用的名称,例如 PythonWebservice 调用的时候直接 PythonWebservice.类 obj = new ConfirmService.类(); obj.方法(参数),返回的就是结果了.

城固县13728533405: python调用外部C#库的dll文件 -
濮丁吉粒: import clr import System clr.AddReferenceToFile("SimpleHash.dll") from Common import * class HashPy(SimpleHash): def __init__(self): pass def HashCalc(self,arg1,arg2): #str to byte[] arg1=System.Text.Encoding.Default.GetBytes(arg1) arg2=...

城固县13728533405: 如何在Visual Studio中的C#调用Python的代码 -
濮丁吉粒: 首先添加两个引用:它们定义了Python和ScriptRuntime两个类型.第一句代码创建了一个Python的运行环境,第二句则使用.net4.0的语法创建了一个动态的对象, OK,下面就可以用这个dynamic类型的对象去调用刚才在定义的welcome方法了.注意:在运行前一定要把hello.py文件设为:Copy always.

城固县13728533405: 用我python写了一个类,怎么在C#中调用它呢?
濮丁吉粒: 用IronPython应该是可以的.不过现在IronPython还不完善[ 本帖最后由 星尘细雨 于 2007-1-24 10:03 编辑 &#093

城固县13728533405: python怎么和C或者C++混合编程 -
濮丁吉粒: 不难的,就是一个套路,主要是3步:1.把Python的数据类型转换为C/C++支持的数据类型;2.调用C/C++函数,得到结果;3.将结果转换为Python支持的数据类型,返回.相当于写个中间层.

城固县13728533405: C#程序怎么调用Python程序 -
濮丁吉粒: 先进入命令行后再用命令行打开C#程序,C#程序运行中出现的任何异常,其实都会直接输出到命令行,这样一来就能知道出现什么错误了.

城固县13728533405: 有会用c#调用python的吗? -
濮丁吉粒: 给你两种方法,一种是调用一般的python程序,另一种是直接调用IronPython程序.第一种:void RunPythonScript(string path, string args = "") { path = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "script\\" + path...

城固县13728533405: C#调用Python -
濮丁吉粒: 把你要调用的功能用 http(或XML-RPC等其他方式)暴露出来,然后C#里面进行调用.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网