关于python调用C#库的问题

问题描述

关于python调用C#库的问题

 大家好,我需要用python来调用C#的.dll,一直在研究http://blog.csdn.net/xugangjava/article/details/7202356这篇文章,现在碰到了一个问题,请大家帮忙出出主意,谢谢。

 首先是这篇文章中的最末尾,命令行中有一条“d.EncryptMd5('dsaf')”(如图1)。请问这个"d."是从何而来?之前也没有看到任何类例化成了"d"?

图1:

 其次是我在调用由C# COM生成的.py文件中的方法时,出现了“CoClassBaseClass”类能正常例化,而“DispatchBaseClass”无法正常例化的情况(如图2和图3),请问这是为什么?如何才是正确的调用方法?

图2:

图3:

以下是用makepy转化C# COM生成的.py:

 # -*- coding: mbcs -*-
# Created by makepy.py version 0.5.01
# By python version 2.7.4 (default, Apr  6 2013, 19:54:46) [MSC v.1500 32 bit (Intel)]
# From type library 'testCom.tlb'
# On Wed Apr 13 16:58:28 2016
''
makepy_version = '0.5.01'
python_version = 0x20704f0

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('{95A0DC02-9D6B-4A40-A78A-C65357E749F5}')
MajorVersion = 1
MinorVersion = 0
LibraryFlags = 8
LCID = 0x0

from win32com.client import DispatchBaseClass
class IMyClass(DispatchBaseClass):
    CLSID = IID('{88DB152F-BC26-43C9-BED0-B6CDE14D85CF}')
    coclass_clsid = None

    def Add(self, x=defaultNamedNotOptArg, y=defaultNamedNotOptArg):
        return self._oleobj_.InvokeTypes(1610743808, LCID, 1, (3, 0), ((3, 1), (3, 1)),x
            , y)

    _prop_map_get_ = {
    }
    _prop_map_put_ = {
    }
    def __iter__(self):
        "Return a Python iterator for this object"
        try:
            ob = self._oleobj_.InvokeTypes(-4,LCID,3,(13, 10),())
        except pythoncom.error:
            raise TypeError("This object does not support enumeration")
        return win32com.client.util.Iterator(ob, None)

class _ComTest(DispatchBaseClass):
    CLSID = IID('{8069ED53-4C67-3611-BB38-AB9721C851EB}')
    coclass_clsid = IID('{20CEDF1F-BB34-4D68-B657-3884B6E84C4C}')

    _prop_map_get_ = {
    }
    _prop_map_put_ = {
    }
    def __iter__(self):
        "Return a Python iterator for this object"
        try:
            ob = self._oleobj_.InvokeTypes(-4,LCID,3,(13, 10),())
        except pythoncom.error:
            raise TypeError("This object does not support enumeration")
        return win32com.client.util.Iterator(ob, None)

class _Object(DispatchBaseClass):
    CLSID = IID('{65074F7F-63C0-304E-AF0A-D51741CB4A8D}')
    coclass_clsid = IID('{20CEDF1F-BB34-4D68-B657-3884B6E84C4C}')

    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))
    def __iter__(self):
        "Return a Python iterator for this object"
        try:
            ob = self._oleobj_.InvokeTypes(-4,LCID,3,(13, 10),())
        except pythoncom.error:
            raise TypeError("This object does not support enumeration")
        return win32com.client.util.Iterator(ob, None)

from win32com.client import CoClassBaseClass
# This CoClass is known by the name 'testCom.ComTest'
class ComTest(CoClassBaseClass): # A CoClass
    CLSID = IID('{20CEDF1F-BB34-4D68-B657-3884B6E84C4C}')
    coclass_sources = [
    ]
    coclass_interfaces = [
        _ComTest,
        _Object,
    ]
    default_interface = _ComTest

IMyClass_vtables_dispatch_ = 1
IMyClass_vtables_ = [
    (( u'Add' , u'x' , u'y' , u'pRetVal' , ), 1610743808, (1610743808, (), [
            (3, 1, None, None) , (3, 1, None, None) , (16387, 10, None, None) , ], 1 , 1 , 4 , 0 , 28 , (3, 0, None, None) , 0 , )),
]

_ComTest_vtables_dispatch_ = 1
_ComTest_vtables_ = [
]

_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 = {
    '{20CEDF1F-BB34-4D68-B657-3884B6E84C4C}' : ComTest,
    '{88DB152F-BC26-43C9-BED0-B6CDE14D85CF}' : IMyClass,
    '{8069ED53-4C67-3611-BB38-AB9721C851EB}' : _ComTest,
    '{65074F7F-63C0-304E-AF0A-D51741CB4A8D}' : _Object,
}
CLSIDToPackageMap = {}
win32com.client.CLSIDToClass.RegisterCLSIDsFromDict( CLSIDToClassMap )
VTablesToPackageMap = {}
VTablesToClassMap = {
    '{88DB152F-BC26-43C9-BED0-B6CDE14D85CF}' : 'IMyClass',
    '{8069ED53-4C67-3611-BB38-AB9721C851EB}' : '_ComTest',
    '{65074F7F-63C0-304E-AF0A-D51741CB4A8D}' : '_Object',
}

NamesToIIDMap = {
    'IMyClass' : '{88DB152F-BC26-43C9-BED0-B6CDE14D85CF}',
    '_ComTest' : '{8069ED53-4C67-3611-BB38-AB9721C851EB}',
    '_Object' : '{65074F7F-63C0-304E-AF0A-D51741CB4A8D}',
}

解决方案

http://www.cnblogs.com/yinhaiming/articles/1599090.html

解决方案二:

C# 调用 Fortran 写的算法库的问题
vb.net / C# 调用 python
在C#中调用python方法

时间: 2024-10-30 23:25:17

关于python调用C#库的问题的相关文章

dll动态库-python 调用DLL 动态库之后 怎么释放

问题描述 python 调用DLL 动态库之后 怎么释放 各位大神,请问python 利用 ctypes调用DLL之后怎么释放啊 解决方案 不需要释放,CDLL析构中会自动释放

Python调用C语言开发的共享库方法实例_python

在helloworld工程中,编写了一个简单的两个数值相加的程序,编译成为共享库后,如何使用python对其进行调用呢? 使用ll命令列出当前目录下的共享库,其中共享库名为libhelloworld.so.0.0.0 复制代码 代码如下: ufo@ufo:~/helloworld/.libs$ ll 总用量 32 drwxr-xr-x 2 ufo ufo 4096  1月 29 14:54 ./ drwxr-xr-x 6 ufo ufo 4096  1月 29 16:08 ../ -rw-r--

python 利用sklearn库做了线性回归,怎么得出线性表达式的各个参数

问题描述 python 利用sklearn库做了线性回归,怎么得出线性表达式的各个参数 from skearn.linear_model import LinearRegression() x=[[6,2],[8,1],[10,0],[14,2],[18,0]] y=[[11],[8.5],[15],[18],[11]] model=LinearRegression() model.fit(x,y) #如何求y=a+bx1+cx2中的a,b,c的值 解决方案 用矩阵直接做不就得了吗,最小二乘公式

python-Python中如何调用第三方库的问题

问题描述 Python中如何调用第三方库的问题 各位大神,晚辈想问一个问题,请大神帮忙.问题:在使用Python2.7 的时候,如何去调用第三方的库.还有就是Python(x,y)与Python2.7 的主要区别是什么?如果安装的是Python(x,y),是不是就不会引起调用第三方库的问题?请各位大神指点,谢谢! 解决方案 首先没用过python(x,y),其次要调用第三方库,你首先要安装(可以用pip或者easyinstall),安装之后,看第三方库的文档,就可以调用了. 解决方案二: PyT

python beautiful soup库的用法

参考:http://cuiqingcai.com/1319.html Beautiful Soup 4.2.0 文档 1. Beautiful Soup 简介 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官方解释如下: Beautiful Soup提供一些简单的.python式的函数用来处理导航.搜索.修改分析树等功能.它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序.Beautiful

Python调用C模块以及性能分析

一.c,ctypes和python的数据类型的对应关系 ctypes type ctype Python type c_char char 1-character string c_wchar wchar_t 1-character unicode string c_byte char int/long c_ubyte unsigned char int/long c_short short int/long c_ushort unsigned short int/long c_int int

Python调用C/C++的种种方法

Python是解释性语言, 底层就是用c实现的, 所以用python调用C是很容易的, 下面就总结一下各种调用的方法, 给出例子, 所有例子都在ubuntu9.10, python2.6下试过. 1. Python 调用 C (base) 想在python中调用c函数, 如这儿的fact #include  int fact(int n) {   if (n <= 1)     return 1;   else     return n * fact(n - 1); } PyObject* wr

Python调用C/C++动态链接库的方法详解_python

本文以实例讲解了Python调用C/C++ DLL动态链接库的方法,具体示例如下: 示例一: 首先,在创建一个DLL工程(本例创建环境为VS 2005),头文件: //hello.h #ifdef EXPORT_HELLO_DLL #define HELLO_API __declspec(dllexport) #else #define HELLO_API __declspec(dllimport) #endif extern "C" { HELLO_API int IntAdd(in

centos swig 编译c,python调用

本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/47259413 未经博主允许不得转载. 1,关于swig SWIG是个帮助使用C或者C++编写的软件能与其它各种高级编程语言进行嵌入联接的开发工具.SWIG能应用于各种不同类型的语言包括常用脚本编译语言例如Perl, PHP, Python, Tcl, Ruby and PHP. 最新的版本已经开始支持golang了. 2,官方例子 首先安装swig,官网网站最新的是3.0.6版