当前位置: 首页 > news >正文

python 动态加载C# 动态库的一些问题

python导入C#动态库问题

背景介绍

我使用的python是3.7,需要调用之前已经用于其他项目的C#编写的动态库(xx.dll).由于调用方法很简单,可以参考下这个调用动态库,这里主要说一下我遇到的问题。

试图加载格式不正确的程序

这个问题实际是由于目标程序和调用的dll不处于相同的编码上,我的目标python使用的是64位编译,而调用的程序采用的是32位编译,这就导致调用出错。可以参考这个详解Python 调用C# dll库最简方法中的2来改变动态库的编码。

引入clr,却无法使用FindAssembly等函数

有一个clr包,但是python调用clr包却是从pythonnet里面的模块,所以下载时候一定要下载对了。但是我自动安装的时候,发现clr成功import了,但是里面不包含常用的findAssembly等函数。之后发现大多的说明的是2.5左右的版本,而我的安装包是3.1的,于是没办法只能退回去,按装了指定的版本2.5.1的了。问题给解决了。

动态加载dll库

我的项目要求尽可能兼容其他不同语言编写的dll,所以我这里就使用了反射来加载C#动态库。首先,python程序指定位置(我用的是xml文件)配置上需要加载的dll路径,然后python程序启动的时候就根据配置文件指定的路径一个个加载dll。这就导致python在import的时候不知道import哪个模块(只知道模块的名字),于是我就各种找如何动态引入。最后发现使用exec执行命令的方式完美解决。具体方式如下:

		sys.path.append(os.getcwd() + "\\static\\dll")if ".dll" in dllPath:backRec = dllPath.index(".dll")tempModuleName = dllPath[0:backRec]clr.FindAssembly("static/dll/" + tempModuleName)else:clr.FindAssembly("static/dll/" + dllPath)clr.AddReference(tempModuleName)execcmd = "from %s import %s,%s" % (nameSpace, classname, InitClassName)exec(execcmd)

反射模块(inspect)使用问题

导入模块之后,需要根据配置文件中具体的方法名称,类名称来获取对应的方法和类。所以使用inspect这个模块,inspect可以通过getmembers来获取具体的属性。然后根据名字找到对应的方法和类。具体代码可以参考如下:

        for key, obj in inspect.getmembers(sys.modules[nameSpace]):if key == classname:curParseClass = objbreak

curParseClass就是名字位classname的类,然后就可以用其进行初始化对象并调用类成员函数,或者直接调用静态函数或者对象。但是这里我碰到一个问题就是inspect.getmembers获取对象属性时有时会失败,失败的原因是,调用的C#动态库定义的类中有个属性由枚举转化得到的字符串,即私有属性_deviceType为string,公有属性DeviceType为枚举对象,get返回时,使用名称获取对应的枚举返回。但是_deviceType的默认值为空,而其枚举里并没有这个属性,就会导致inspect.getmembers将DeviceType转化为string时出现了无法转化的情况。

相关文章:

python 动态加载C# 动态库的一些问题

python导入C#动态库问题 背景介绍 我使用的python是3.7,需要调用之前已经用于其他项目的C#编写的动态库(xx.dll).由于调用方法很简单,可以参考下这个调用动态库,这里主要说一下我遇到的问题。 试图加载格式不正确的程序 这个问题实际是由于目标程序和…...

代码审计-锐捷NBR路由器 EWEB网管系统 远程命令执行

那天下着很大的雨,母亲从城里走回来的时候,浑身就是一个泥人,那一刻我就知道我没有别的选择了 出现漏洞的文件在 /guest_auth/guestIsUp.php 审查源码我们发现通过命令拼接的方式构造命令执行 构造payload: /guest_auth/guestI…...

VBA技术资料MF75:测量所选单元格范围的高度和宽度

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。我的教程一共九套,分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的入门,到…...

力扣 26. 删除有序数组中的重复项

目录 1.解题思路2.代码实现 1.解题思路 由于数组为非严格递增排列的数组,因此可利用快慢指针,如果快指针减一不等于快指针,将快指针的值给慢指针,并将快慢指针同时加一,但如果相同,则只让快指针加一向后走…...

【uniapp】仿微信支付界面

效果图 完整代码 <template><view class="my-pay-page"><view :style=...

windows + ubuntu + vscode开发环境配置安装

一、卸载WSL/WSL2 如果安装了windows子系统的朋友&#xff0c;可以选择继续使用。或者提前卸载WSL&#xff0c;再选择安装虚拟机。虚拟机占用内存较大&#xff0c;WSL可能对于开发的一些需求还有欠缺。根据自己的实际情况进行选择。 WIN10/11安装WSL(请参考官方资料&#xff0c…...

设计模式:责任链模式(C#、JAVA、JavaScript、C++、Python、Go、PHP)

上一篇《享元模式》 下一篇《解释器模式》 简介&#xff1a; 责任链模式&#xff0c;它是一种行为型设计模式&#xff0c;它将许多对象连接起来形成一条链&#xff0c;每个对象处理不同的请求&#xff0c…...

koa搭建服务器(二)

在上一篇文章已经成功的运行了一个http服务器&#xff0c;接下来就是使用Sequelize ORM&#xff08;官方文档&#xff1a;Sequelize 简介 | Sequelize中文文档 | Sequelize中文网&#xff09;来操作数据库。 1、安装依赖 首先也是需要安装相关的依赖 npm i sequelize npm i …...

LeetCode 125 验证回文串 简单

题目 - 点击直达 1. 125 验证回文串 简单1. 题目详情1. 原题链接2. 题目要求3. 基础框架 2. 解题思路1. 思路分析2. 时间复杂度3. 代码实现 1. 125 验证回文串 简单 1. 题目详情 如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后&#xff0c;短语正着读和反…...

Android底层摸索改BUG(一):Android系统状态栏显示不下Wifi图标

这是我入职的第一个BUG&#xff0c;头疼&#xff0c;隔壁实习生一周解决了&#xff0c;我多花了几天 其中最大的原因就是我思考复杂了&#xff0c;在公司系统上&#xff0c;此BUG标题为&#xff1a; 请确认Wifi优先级&#xff0c;状态栏Wifi被忽略 BUG意思就是&#xff1a;当…...

第十三章---枚举类型与泛型

一&#xff0c;枚举类型 1.使用枚举类型设置常量 设置常量时&#xff0c;我们通常将常量放置在接口中&#xff0c;这样在程序中就可以直接使用。该常量稚因为在接口中定义常量时&#xff0c;该常量的修饰符为 final 与 static。 public interface Constants ( public static …...

shell语法大全(超级详细!!!!),非常适合入门

本文旨在对y总的Linux基础课shell语法做学习记录&#xff0c;指令较多&#xff0c;方便日后查找。 参考视频&#xff1a;Linux基础课 参考教程&#xff1a;Linux教程 1 概论 Linux中常见的shell脚本有很多种&#xff0c;常见的有&#xff1a; Bourne Shell(/usr/bin/sh或/bi…...

【Python机器学习】零基础掌握ExtraTreesRegressor集成学习

面临的问题:如何更准确地预测糖尿病患者的病情? 在医疗领域,准确预测疾病的发展状况是至关重要的。尤其是对于糖尿病这样的慢性病,一个精准的预测模型能帮助医生制定更有效的治疗方案。但问题是,如何构建一个高准确度的预测模型呢? 假设现有一组糖尿病患者的医疗数据,…...

网络协议--TCP的交互数据流

19.1 引言 前一章我们介绍了TCP连接的建立与释放&#xff0c;现在来介绍使用TCP进行数据传输的有关问题。 一些有关TCP通信量的研究如[Caceres et al. 1991]发现&#xff0c;如果按照分组数量计算&#xff0c;约有一半的TCP报文段包含成块数据&#xff08;如FTP、电子邮件和U…...

IOC课程整理-13 Spring校验

1. Spring 校验使用场景 2. Validator 接口设计 3. Errors 接口设计 4. Errors 文案来源 5. 自定义 Validator 6. Validator 的救赎 7. 面试题精选 Spring 校验接口是哪个 org.springframework.validation.Validator Spring 有哪些校验核心组件&#xff1f;...

SSM咖啡点餐管理系统开发mysql数据库web结构java编程计算机网页源码eclipse项目

一、源码特点 SSM 咖啡点餐管理系统是一套完善的信息系统&#xff0c;结合SSM框架完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主 要采用B/S模式开…...

Capacitor 打包 h5 到 Android 应用,uniapp https http net::ERR_CLEARTEXT_NOT_PERMITTED

Capacitor 打包 h5 到 Android 应用&#xff0c;uniapp https http net::ERR_CLEARTEXT_NOT_PERMITTED capacitor 官网&#xff1a; https://capacitorjs.com/docs/ 项目上需要做一个 app&#xff0c;而这个 app 是用 uniapp 做的&#xff0c;里面用到了一个依赖 dom 的库&…...

华为数通方向HCIP-DataCom H12-831题库(多选题:101-120)

第101题 LSR对收到的标签进行保留,且保留方式有多种,那么以下关于LDP标签保留一自由方式的说法 A、保留邻居发送来的所有标签 B、需要更多的内存和标签空间 C、只保留来自下一跳邻居的标签,丢弃所有非下一跳铃邻居发来的标签 D、节省内存和标签空间 E、当IP路由收敛、下一跳…...

misc学习(4)Traffic(流量分析)-

感悟&#xff1a;回想起自己学的计算机网络和网络协议分析&#xff0c;有所感悟&#xff1a;计算机网络好比将一群人区分开来&#xff08;局域网&#xff09;&#xff0c;为了能够使得不同部分的人能够沟通&#xff08;wireshark中的数据包&#xff09;&#xff0c;就设置了网络…...

Less的基本语法

less的每一个语句后必须使用";"结束&#xff0c;否则可能无法正确的转换成css 1、导入 即在当前less文件中引用其它less文件&#xff0c;被引入的less文件中的内容可以在此less文件中使用。在引用less文件时可以省略扩展名 import "global"; // global.…...

NotebookLM风格崩塌的7个隐性信号:从语义漂移到角色失焦,一文诊断并修复

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM风格崩塌的诊断元框架 当NotebookLM在真实知识工作流中表现出响应失焦、引用漂移、上下文断裂或语义坍缩等现象时&#xff0c;“风格崩塌”并非界面缺陷&#xff0c;而是底层多模态对齐机制失…...

快速开发AI客服原型时如何利用Taotoken分钟级接入多模型

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 快速开发AI客服原型时如何利用Taotoken分钟级接入多模型 在探索和构建AI客服原型时&#xff0c;开发者常常面临一个核心矛盾&#…...

SAP ABAP SOAUTH2 配置原理与 OAuth2 四要素落地解析

1. 为什么 SAP ABAP 系统里填个 OAuth2 参数总像在解谜题&#xff1f; 刚接手一个对接钉钉开放平台的 ABAP 项目时&#xff0c;我盯着事务码 SOAUTH2 的配置界面足足看了二十分钟——Client ID、Client Secret、Authorization Endpoint、Token Endpoint、Redirect URI……每个…...

Unity AI工作流实战指南:从Editor到运行时的稳定集成

1. 这不是“AI插件合集”&#xff0c;而是Unity开发者真正用得上的智能工作流Unity开发者每天面对的&#xff0c;从来不是“要不要用AI”&#xff0c;而是“哪个AI功能能让我今天少改三遍材质球、少跑两次Build、少被美术追着问‘这个Shader为什么在iOS上黑一块’”。我做Unity…...

SaaS系统数据范围权限设计:从RBAC/ABAC到高性能实现

1. 项目概述&#xff1a;当数据安全遇上规模化增长在构建和运营一个面向多租户的大型SaaS&#xff08;软件即服务&#xff09;系统时&#xff0c;数据安全与隔离是悬在每一位架构师和开发者头上的“达摩克利斯之剑”。这不仅仅是技术问题&#xff0c;更是商业信任的基石。想象一…...

TDengine Tag 设计哲学与 Schema 变更机制

2.数据模型 > 04 Tag 设计哲学与 Schema 变更机制 — 静态属性建模与在线结构演进 适用版本&#xff1a;TDengine v3.x&#xff08;v3.3.x / v3.4.x&#xff09; | 最后更新&#xff1a;2026-05-16 概述 Tag&#xff08;标签&#xff09;是 TDengine 数据模型中区别于传统…...

ElevenLabs支持贵州话吗?2024最新实测结果+3种绕过官方限制的合规接入方案

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;ElevenLabs对贵州话的原生支持现状与底层语音技术解析 ElevenLabs当前官方模型库中尚未提供针对贵州话&#xff08;含贵阳话、遵义话等主要方言变体&#xff09;的独立语言选项或预训练语音模型。其公开支持的…...

紫光同创FPGA网络摄像头方案选型指南:OV7725 vs OV5640,YT8531 vs KSZ9031怎么选?

紫光同创FPGA网络摄像头方案选型指南&#xff1a;OV7725 vs OV5640&#xff0c;YT8531 vs KSZ9031深度解析 在工业视觉和安防监控领域&#xff0c;FPGA因其并行处理能力和低延迟特性&#xff0c;成为实时视频采集与传输的理想选择。紫光同创作为国产FPGA的重要代表&#xff0c;…...

python智能ai技术的智慧城市便民服务管理中心平台_668r7c05

目录同行可拿货,招校园代理 ,本人源头供货商项目背景核心技术功能模块应用场景优势与创新项目技术支持获取博主联系方式 源码获取详细视频演示 &#xff1a;同行可合作点击我获取源码->获取博主联系方式->进我个人主页-->同行可拿货,招校园代理 ,本人源头供货商 项目…...

别再只画图了!深度解读R语言列线图结果:如何从lrm模型输出看懂每个变量的影响大小?

从模型输出到临床洞察&#xff1a;R语言列线图结果深度解析指南 当你第一次看到lrm模型输出的那堆"Effects"和"Odds Ratio"时&#xff0c;是不是感觉像在解读外星文&#xff1f;别担心&#xff0c;这正是从"会画图"到"懂原理"的必经之…...