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()问题得到解决