在Python中引用C#的动态库的的Form类

python灵活但是对于界面编程具有一定的局限性。得到一个Windows应用程序的工程projectA,将其转换为动态库并能够被python程序调用的代码如下:

一:将windows应用程序转换为dll 动态库:

1.1 注释掉 projectA中的main函数

1.2  projectA-》属性-》应用程序=》输出类型由“Windows 应用程序”改为“类库” 

1.3 运行projectA 生成 “projectA.dll”。

二:在C#中引用“”projectA.dll”

假设要在Project B 引用 projectA.dll。操作如下:

2.1 右键Project B 所在工程下的引用,单击引用 ,添加引用,选择“projectA.dll“

2.2 在需要用到projectA的 的文件开头添加 using namespaceofprojectA;

注意 using namespaceofprojectA 为projectA 代码中的命名空间的名字“(“namespace”)

三:在pytho中引用 ”projectA.dll” 生成界面

3.1 安装 pythonnet

pip install pythonnet -i https://pypi.douban.com/simple

3.2 在文件teshow.py中引用 projectA.dll,需要将projectA.dll与 teshow.py放在同一目录下

引用代码如下:

程序会报出错误信息如下:

System.InvalidOperationException: DragDrop 注册失败。 ---> System.Threading.ThreadStateException: 在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式。请确保您的 Main 函数带有 STAThreadAttribute 标记。

是线程的问题,需要在当前的文件中另起线程。代码改为如下

运行成功。

3.3 最后注意 在runtest() 这个函数中的instance1.ShowDialog()的这个函数。原来在C#的环境下一直调用的是instance1.show()。但是在跨开发语言调用时,窗口会闪退,后来换成ShowDialog()问题得到解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值