【Unity】使用 System.Windows.Forms 的问题

这篇具有很好参考价值的文章主要介绍了【Unity】使用 System.Windows.Forms 的问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        因为最近开发需要用到使用 Windows 自带的窗口打开、文件选择等功能,然后兜兜转转需要使用  System.Windows.Forms 这个库。这个库在 WinForm 里是很常见的,但是要在 Unity 里使用,并打包出来还是有些坑的。

        我这里使用的 Unity 版本:2022.2.1f1c1

        PS:这个显然只能在PC上使用,想都不用想 ~

1、引入 System.Windows.Forms.dll

        首先这个 dll 不能从 vs 那里找,也就是 C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\…… 这个文件夹下面。这个导入进去用不了,会报错。

        只能使用Unity自带的,也就是在 :……Editor\Data\MonoBleedingEdge\lib\mono\2.0-api 这个目录下面的 dll ,参考下文:

Unity-使用System.Windows.Forms.dll_慧眼圣贤心的博客-CSDN博客在Unity使用Windows窗体函数https://blog.csdn.net/pgw00k/article/details/53166861        因为我是Unity2022,所以没有 .Net 4.x 的选项,似乎那个选项并没有什么影响,都能正常跑。具体的使用方法是比较简单的:

using System.Windows.Forms;

public static void OpenWindowFolder()
{
    FolderBrowserDialog fbd = new FolderBrowserDialog();
    fbd.ShowDialog();
}

        就这样就完成了,在编辑器下运行效果如下:

【Unity】使用 System.Windows.Forms 的问题

         可以看到这个窗口的样式还是不知道哪个年代的窗口,然后语言也不是中文。不过无所谓,这个反正是测试用的,估计是可以在参数里设置的。


        但是用这个是用这个是有问题的(后面会详细说明),编辑器下是可以用的,但是打包出来有问题不能正常运行。后面的第2、3、4章节都是问题说明和解决思路,如不需要可以直接看第5小节的总结。


        

2、出包运行

        正常打包很容易就闪退了,很诡异(虽然有时候能出包)。我发现在 Build Setting 里把 Architecture 改成 Intel 32-bit 成功率就高了很多:

        

【Unity】使用 System.Windows.Forms 的问题

         实际上似乎不影响结果,就是单纯地打包成功率高一些而已,会减少一些报错和闪退的概率。

        但是运行起来就有问题了,会报空:

【Unity】使用 System.Windows.Forms 的问题

        显然是无法正常运行的,然后我上网去搜了一些解决方案。

 3、尝试使用csc.rsp解决

        首先测试了一下这个用 csc.rsp 来解决:

Unity 使用System.Windows.Forms.dll 库打包后,运行报错!_humilezr的博客-CSDN博客_unity dll打包程序运行不对好久没写博客了,年前接了一个项目,项目中需要为文件选择存储路径,然后就选择了比较常用的System.Windows.Forms.dll 库。 在Unity编辑器模式下没任何问题,但是打包后,无法打开存储路径选择弹窗,调试发现是报InvalidProgramException错误。可是打包后包里明明有System.Windows.Forms.dll 这个库,经过搜集资料...https://blog.csdn.net/humilezr/article/details/104615462        导入 csc.rsp 的之后,喜闻乐见又报错了:

【Unity】使用 System.Windows.Forms 的问题

        报错信息如下:

         ……csc.rsp: not parsed correctly: System.Windows.Forms.dll could not be found as a system library.

        If this was meant as a user reference please provide the relative path from project root (parent of the Assets folder) in the response file.

        等于是只能引用到Assets同级目录下的文件是吧,那不是等于没得搞?本来不就是这个dll有问题嘛……

4、解决思路2:更换dll文件

        后面看到了有个人跟我一样的问题:        unity使用 form.showDialog() 函数,打包后出现空指针错误 的解决方法_参宿_七的博客-CSDN博客需要实现一个unity打开文件/文件夹选择框,一开始使用:path = UnityEditor.EditorUtility.OpenFilePanel("Load Images of Directory", UnityEngine.Application.dataPath, extion);方法实现,但是这种方法只在编辑器里起作用,不能导出exe。于是使用:using System.Windows.Forms;OpenFileDialog dialog = new OpenFileDihttps://blog.csdn.net/Michaelia_hu/article/details/116015772        他提到一篇文章,说是需要修改引用的dll,我感觉这个思路挺靠谱的:

c # - the error occurs only after building openfiledialog in unityIn unity, I decided to use OpenFileDialog to specify the file. https://qiita.com/otochan/items/0f20fad94467bb2c2572 I imhttps://www.tutorialfor.com/questions-317730.htm

        之前是直接复制的 VS 自带的dll,后面进Unity不识别,报错。网上说的是要在Untiy安装目录下找 2.0.0 的那个。但是我之前用的时候就感觉有问题,因为 VS 自带的 dll 大概 2.7 mb,而Unity这个只有 730kb ,就很怪,但是在编辑器下又确实能运行。

        后面我换了一个目录下的:……MonoBleedingEdge\lib\mono\unityjit-win32

        这个目录下面也有个 Winfrom 的dll,而且有2.7mb,我估计就是这个了。我把他导入到包里面,然后打包出来果然成功了:

【Unity】使用 System.Windows.Forms 的问题

        可见打包出来也能正常运行了。

        PS:使用Winfrom阶段,Unity 进程会暂停,等待窗口选择的返回,需要注意使用场景。

5、总结

  1. 找到Unity的安装目录,在此目录下:……\Editor\Data\MonoBleedingEdge\lib\mono\unityjit-win32 找到System.Windows.Forms.dll 这个文件。
  2. 将其放到Plugins下,Unity会自动添加引用。
  3. 直接代码使用打包即可。

6、注意事项

        我在编辑器下使用时,极易造成闪退(一般情况是,在调用API后当时没啥问题,但是一段时间后会突然闪退)!目前还不清楚具体原因,而且没有在打包后大量测试。目前建议是编辑器下测试时调用一下,测试通过之后不要再调用此代码。文章来源地址https://www.toymoban.com/news/detail-401733.html

到了这里,关于【Unity】使用 System.Windows.Forms 的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG)) 在 System.Windows.Forms.UnsafeNativeMethods.C

    今天在有些客户的电脑上安装程序时日志提示了以下错误: 2023-03-10 08:34:42.659 +08:00 [INF] 没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG)) 在 System.Windows.Forms.UnsafeNativeMethods.CoCreateInstance(Guid clsid, Object punkOuter, Int32 context, Guid iid) 在 System.Windows.Forms.AxHost.CreateWithLicense(Strin

    2024年02月02日
    浏览(36)
  • vscoder cd : 找不到路径“C:\Windows\System32\my-app\my-app”,因为该路径不存在。 所在位置 行:1 字符: 1 windows

    PS C:WindowsSystem32my-app cd my-app cd : 找不到路径“C:WindowsSystem32my-appmy-app”,因为该路径不存在。 所在位置 行:1 字符: 1 cd my-app PS C:WindowsSystem32my-app cd drc cd : 找不到路径“C:WindowsSystem32my-appdrc”,因为该路径不存在。 所在位置 行:1 字符: 1 cd drc PS C:WindowsSystem32my-app c

    2024年02月05日
    浏览(67)
  • Windows UAC权限详解以及因为权限不对等引发的若干问题分享

    目录 1、什么是UAC? 2、微软为什么要设计UAC? 3、标准用户权限与管理员权限 4、程序到底以哪种权限运行?与哪些因素有关? 4.1、给程序设置以管理员权限运行的属性 4.2、当前登录用户的类型 5、案例1 - 无法在企业微信聊天框中启动安装包程序 6、案例2 - 使用Windbg时可能会

    2024年02月04日
    浏览(43)
  • 解决windows系统80端口被system占用问题

    80端口被 system (pid=4) 系统占用的解决方法, 80端口一般被当做网页服务器的默认端口,使用本机搭建服务器环境的时候,都会默认使用80端口来作为网页访问端,但是有的时候80端口会被其他的不明身份的程序占用,导致 Apache 启动失败,修改 Apache 的默认端口后访问本机地址

    2024年02月17日
    浏览(53)
  • Unity 3D Input System的使用

    Input System是Unity新推出的输入系统,可以用作以前Input Manager的更具扩展性和可自定义性的替代方案。这里我将使用Unity 3D的Input System来实现一个FPS第一人称的游戏场景。 演示效果如下: 新建一个Unity 3D项目,在Asset Store里面下载StarterAssets - FirstPerson,然后在Package Manager里面导

    2024年02月20日
    浏览(33)
  • TX Text Control .NET for Windows Forms 32 Crk

    WINDOWS UI TX Text Control is a royalty-free, fully programmable rich edit control that offers developers a broad range of word processing features in a reusable component designed for Visual Studio. It provides comprehensive text formatting, powerful mail merge features and all word processing key concepts such as table support, images, headers and footers

    2024年02月07日
    浏览(48)
  • C# 计时器(Timer )WPF窗体出现“System.InvalidOperationException:“调用线程必须为 STA,因为许多 UI 组件都需要。””

    大家在WPF窗体使用计时器(Timer)的时候可能会出现一个这样的错误“System.InvalidOperationException:“调用线程必须为 STA,因为许多 UI 组件都需要。””,这个错误一般都是线程的问题,我们可以使用另一种计时器(DispatcherTimer)来避免发生这种问题。 以上就是解决Timer计时器出

    2024年02月04日
    浏览(53)
  • Unity中-C#执行Cmd命令(System.Diagnostics.Process的使用)

    在Unity中,我们可能需要自己写Editor工具。有时候我们可能还需要执行外部指令或者脚本(比如python脚本),这个时候,就需要用c#的System.Diagnostics.Process这个类了。 命名空间 using System.Diagnostics; Process.Star()的构造方法 名称 说明 Process.Start () 启动(或重用)此 Process 组件的?

    2024年02月04日
    浏览(47)
  • TX Text Control 31.SP3 for Windows Forms Crack

    视窗用户界面 TX 文本控件是一种完全可编程的丰富编辑控件,可在专为 Visual Studio 设计的可重用组件中为开发人员提供广泛的文字处理功能。它提供全面的文本格式,强大的邮件合并功能和所有文字处理关键概念,如表格支持,图像,页眉和页脚以及页面部分。 全面的文本

    2024年02月12日
    浏览(52)
  • 电脑蓝屏C:\WINDOWS\System32\Logfiles\Srt\SrtTrail.txt问题解决方法

    高级选项-疑难解答-启动设置 F4或 F8重启尝试 方法一不行的话,高级选项-疑难解答-高级选项-打开命令行 输入notepad--记事本下-文件-打开C:WINDOWSSystem32LogfilesSrtSrtTrail.txt 从上往下找执行错误的地方 示例:(这样八成是下了盗版steam,如steambig这个破玩意) 若跟我这种情况类

    2024年01月23日
    浏览(104)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包