IronPython调用C# DLL函数方法
C# DLL源码
using System;
using System.Collections.Generic;
using System.Text;
using System.Security.Cryptography; namespace Common
{
public class SimpleHash
{
public string HashCalc(byte[] audioBuffer, byte[] key)
{
......
return result;
}
}
}
需要在IronPython脚本中调用HashCalc函数,Python脚本如下:
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=System.Text.Encoding.Default.GetBytes(arg2) return SimpleHash.HashCalc(self,arg1,arg2) audiobuff='1234567812345678123456781234567812345678123456781234567812345678\
\
\
'
key='' print HashPy().HashCalc(audiobuff,key)
详细说明:
1. clr.AddReferenceToFile("SimpleHash.dll") 加载DLL文件
2. from Common import * 导入命名空间
3. 由于C#方法HashCalc不是静态方法,需要先定义类,再进行访问。若HashCalc为静态方法,则IronPython脚本可直接调用:
namespace Common
{
public class SimpleHash
{
public static string HashCalc(byte[] audioBuffer, byte[] key)
{
...
return ToHex(result, );
}
}
}
clr.AddReferenceToFile("SimpleHash.dll")
from Common import *
…
SimpleHash. HashCalc(audiobuff,key)
4. C#方法参数为byte[]格式,需要将str转换为byte[]格式,否则会报错“TypeError: expected Array[Byte], got str”,相互转换代码如下:
import System
#String To Byte[]:
byte[] byteArray = System.Text.Encoding.Default.GetBytes(str);
#Byte[] To String:
string str = System.Text.Encoding.Default.GetString(byteArray);
5. 最后运行结果如下

IronPython调用C# DLL函数方法的更多相关文章
- go 调用windows dll 的方法
go 调用windows dll 的方法 ,代码如下: package main import ( "fmt" "syscall" "time&quo ...
- Java Tomcat 中调用.net DLL的方法
近日一个java的项目,客户要求项目中必须使用其提供的加密机制,扔给了两个.net写的DLL.网络上搜了一圈也没找到啥东西,甚至看到人扬言此事绝无可能.郁闷当中考虑了一个思路.用C#做一个Com,调用 ...
- java调用C++ DLL库方法
最近一个项目要开发网页端人脸识别项目,人脸识别的算法已经写好,是C++版,但是网页端要求使用Java后台,这就涉及到Java调用DLL的问题.经过查找,实现了一个简单的例子. 1.第一步,先在Java ...
- Python调用C++DLL函数出错String类型问题
调用c++ 函数原型如下,一直失败,请个日志断点发现 参数未能正确解析. int EXPORT init_ner(string cfg_path); typedef int (*Proc_init_n ...
- 关于C#动态调用VC Dll的方法(转)
http://blog.csdn.net/null1/article/details/3953155
- c++ 调用DLL函数,出现错误
c++ 调用DLL函数,出现错误 Run-Time Check Failure #0 - The value of ESP was not properly saved across a funct ...
- unity调用c++ dll方法介绍
摘要 unity用的很普遍,现在很多代码还是用c++写的,需要用unity去调用c++的代码.这里介绍了一种unity调用c++ dll的方法,希望有所帮助. 我采用的软件是Visual Studio ...
- C#调用C++ dll中返回值为字符串的函数问题
C#调用C++ dll函数,如果返回值为字符串,我们使用string去接收就会报错,因为C++返回的是char*,是个指针,所以c# 要用 IntPtr 来接收. C++: //预编译的标头 .h e ...
- C#调用C++ Dll
现在项目基本都是旁边C++的哥们做好dll扔给我,然后我调用.好久之前晚上down了一份c#调用c++dll的方法,出处早已经遗忘.闲来无事,放上来好了.原作者看到后可以留言,我会把您链接放上的,帮了 ...
随机推荐
- ServiceStack
https://github.com/ServiceStack/ServiceStack/wiki/Routing Service Gateway https://github.com/Service ...
- mybatis 批量插入和where条件使用
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-/ ...
- 什么是Spring的命名空间及使用Spring 的命名空间p 装配属性
这个就要从XML说了,Spring的配置管理可以利用XML方式进行配置,而XML里面就有命名空间这个概念..实际上就和标签的意思有点像 你给一个命名空间以后,这个XML文件里面就可以用那个命名空间上下 ...
- how-to-install-hyper-v-on-a-virtual-machine-in-hyper-v.aspx
BEFORE STARTING IT IS IMPORTANT TO KNOW THAT THIS ENVIRONMENT IS NOT SUPPORTED BY MICROSOFT. USE IT ...
- 动态进行JQ Validate 的方法
$.validator.unobtrusive.parse($('form[action = "@Url.Action()"]'));
- SLA了解
许多企业正要求服务品质协议(SLA),SLA 可以保证企业为之付费的 IT 服务的可靠性.随着 Web 服务成为主流,客户将要求保证服务质量的 SLA.在本文中,Judith M. Myerson 说 ...
- android 旋转手机的时候,如何忽略onCreate再次被系统调用?
实现一个程序,主要是不想在手机横竖屏的时候重新onCreate,所以在配置文件中增加了配置选项: android:configChanges="orientation|keyboardHid ...
- SQL常见的可优化点
# 索引相关 # ################################################### 1. 查询(或更新,删除,可以转换为查询)没有用到索引 这是最基础的步骤,需要 ...
- 如何进行oracle capability i/o(压力测试数据库服务器i/o性能)
一 .oracle 有关 IO 信息的相关统计函数 Oracle i/o stack包含hbas,存储相关的交换机.存储物理磁盘.那么oracle建议在应用程序部署的时候,建议去验证i/o避免存在问题 ...
- Redis学习手册(服务器管理)
转:http://www.cnblogs.com/stephen-liu74/archive/2012/02/27/2369480.html 一.概述: Redis在设计之初就被定义为长时间不间断运行 ...