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\
1234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678‘
key=‘12345678‘

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, 32);
        }
    }
}
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. 最后运行结果如下

时间: 2024-10-04 09:56:48

IronPython调用C# DLL函数方法的相关文章

C语NET调用 C++ dll 函数 时传递字符串 需要注意的问题

1:C# 调用 返回 字符串 C++ native dll 函数 的注意事项: a:C++ DLL的返回值,安全的做法是分配一个全局 char 数组,把要返回的 char * 复制到这个 char 数组中, 1 char buff[255]; 2 3 const char* __stdcall ReturnString() 4 { 5 strcpy(buff,"xxxxxxxxxxxxxxx"); 6 return buff; 7 } b:C# 收到 字符串后,需要 Marshal 1

java调用C++ DLL库方法

最近一个项目要开发网页端人脸识别项目,人脸识别的算法已经写好,是C++版,但是网页端要求使用Java后台,这就涉及到Java调用DLL的问题.经过查找,实现了一个简单的例子. 1.第一步,先在Java中新建一个类 如上图,其中注意这句System.loadLibrary("javaCallcpp");,这就是加载dll文件的代码了.然后我们需要dll中实现下面定义的加减乘除方法. 2.编译文件,文件名为Java2cpp.java,首先编译成class文件,如果用的是eclipse,这个

Python调用C++DLL函数出错String类型问题

调用c++ 函数原型如下,一直失败,请个日志断点发现 参数未能正确解析. int EXPORT init_ner(string cfg_path); typedef int (*Proc_init_ner)(string cfg_path); int EXPORT fini_ner(); typedef int (*Proc_fini_ner)(); string EXPORT process(string input_jsn_str); typedef string (*Proc_proces

VB调用VC DLL函数

—————————————————————————VC部分————————————————————————————————————— 声明 ******************************************************************************************************** extern "C" _declspec(dllexport)[] _stdcall [] ************************

Unity3d 调用 C++ DLL之 DLL回调Unity3d (C++ DLL回调 C#函数)

上篇   Unity3d 调用C++ DLL (Win平台)  介绍了简单的 Unity3d 调用 C++ DLL的方法,但是这样是不够的,这里再讲下通过函数指针让 C++ DLL中回调 Unity3d 的方式. 转自http://blog.csdn.net/huutu 星环游戏 http://www.thisisgame.com.cn 创建DLL 以及在 Unity3d 中调用 DLL 中函数在上篇中介绍了. 首先,在C#中是没有函数指针的,我们使用 Delegate . 转自http://b

?c++ 调用DLL函数,出现错误

Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention. 错误原因

C#调用外部DLL介绍及使用详解

一.      DLL与应用程序 动态链接库(也称为DLL,即为“Dynamic Link Library”的缩写)是Microsoft Windows最重要的组成要素之一,打开Windows系统文件夹,你会发现文件夹中有很多DLL文件,Windows就是将一些主要的系统功能以DLL模块的形式实现. 动态链接库是不能直接执行的,也不能接收消息,它只是一个独立的文件,其中包含能被程序或其它DLL调用来完成一定操作的函数(方法.注:C#中一般称为“方法”),但这些函数不是执行程序本身的一部分,而是根

php中常量 const属性,静态属性,静态的函数方法

<?php//php中的常量define('MYNUM', 2000);echo MYNUM.'<br>';if(!defined('MYNUM')){ define('MYNUM', 4000);}echo MYNUM;//类内声明及使用class TestConst { const COUNTRY = 'China'; //const不能加public, static也不需要$, 变量名称大写 static $static = 'Static'; public function ge

IronPython脚本调用C#dll示例

上篇Python脚本调用C#代码数据交互示例(hello world)介绍了与C#紧密结合的示例,这里还将提供一个与C#结合更紧密的示例,直接调用C#编写的DLL.      我们还是沿用了上篇文章的代码(其实这里可以直接使用IronPython调试器进行联调了,没有必要再嵌入到C#了) 注意:scriptEngine.AddToPath(Application.StartupPath); 这句代码比较关键,设定dll文件所在的目录. using System; using System.Col