在ubuntu 上使用wine 运行Delphi win32 应用
<p>随着delphi 10.x 系列开始支持Linux 开发,我们的服务器端可以直接支持LInux 服务器了,</p><p>由于客户越来越多使用Linux 作为服务器端, 但是对于过去老的win32 下开发的服务端,一时半会还无法直接转到移植到Linux 下,我们</p>
<p>需要一个过渡的方法,来保证服务端满足要求。这时候需要使用wine 来实现这种转换。Wine (“Wine Is Not an Emulator” 的首字母缩写)</p>
<p>是一个能够在多种 POSIX-compliant 操作系统(诸如 Linux,macOS 及 BSD 等)上运行 Windows 应用的兼容层。</p>
<p>Wine 不是像虚拟机或者模拟器一样模仿内部的 Windows 逻辑,而是將 Windows API 调用翻译成为动态的 POSIX 调用,</p>
<p>免除了性能和其他一些行为的内存占用,让你能够干净地集合 Windows 应用到你的桌面。</p>
<p>更多关于wine 的介绍,请移步官网了解。</p>
<p>首先,我们需要在ubuntu安装 wine。这个很简单</p>
<p>sudo apt install wine.</p>
<p><img src="https://img2020.cnblogs.com/blog/365737/202005/365737-20200504153500498-1944676080.png" alt=""></p>
<p> </p>
<p> 安装完后,执行</p>
<p>wine --version</p>
<p><img src="https://img2020.cnblogs.com/blog/365737/202005/365737-20200504153553431-1173256696.png" alt=""></p>
<p> </p>
<p>显示运行成功。</p>
<p>我们先试着运行一个kbmmw 的smartbind 例子。因为里面没有网络和数据库的功能。</p>
<p>在windows 下的界面为:</p>
<p><img src="https://img2020.cnblogs.com/blog/365737/202005/365737-20200504154107096-932006522.png" alt=""></p>
<p> </p>
<p> 把这个exe 拷入到Linux 服务器上,修改成可执行权限。</p>
<p>在Linux 下运行·</p>
<p>wine Project1.exe</p>
<p>非常顺利的执行了。</p>
<p><img src="https://img2020.cnblogs.com/blog/365737/202005/365737-20200504155148196-663370967.png" alt=""></p>
<p> </p>
<p>现在搞一下常用的比较麻烦的ADO 数据库应用程序</p>
<p>我们先用delphi 建立一个ado 应用程序,访问sql server 数据库</p>
<p><img src="https://img2020.cnblogs.com/blog/365737/202006/365737-20200613170635719-1001827474.png" alt="" loading="lazy"></p>
<p> </p>
<p> </p>
<p><img src="https://img2020.cnblogs.com/blog/365737/202006/365737-20200613170820536-1766787967.png" alt="" loading="lazy"></p>
<p> </p>
<p> 这是一个标准的win32 ado 应用程序。在win10 下可以正常运行。</p>
<p>由于要使用win32 的API,我们使用标志符,说明是win32 应用</p>
<p>WINEARCH="win32" wine Project3.exe</p>
<p><img src="https://img2020.cnblogs.com/blog/365737/202006/365737-20200613171159410-72749165.png" alt="" loading="lazy"></p>
<p> </p>
<p> 运行,出错了</p>
<p><img src="https://img2020.cnblogs.com/blog/365737/202006/365737-20200613171245916-10851593.png" alt="" loading="lazy"></p>
<p> </p>
<p> 原因是没有找到ado 相关的一些API。我们需要给wine 安装ado驱动。</p>
<p>我们首先需要在微软官网上下载MDAC</p>
<p>https://www.microsoft.com/zh-cn/download/details.aspx?id=5793</p>
<p><img src="https://img2020.cnblogs.com/blog/365737/202006/365737-20200613171722201-1373021162.png" alt="" loading="lazy"></p>
<p> </p>
<p> 复制到linux 服务器里面</p>
<p>然后运行</p>
<p>WINEARCH="win32" winecfg</p>
<p><img src="https://img2020.cnblogs.com/blog/365737/202006/365737-20200613171917586-767248007.png" alt="" loading="lazy"></p>
<p> </p>
<p> 将这个地方修改成WINDOWS NT 4.0</p>
<p><img src="https://img2020.cnblogs.com/blog/365737/202006/365737-20200613172032161-1033077826.png" alt="" loading="lazy"></p>
<p> </p>
<p> 点应用</p>
<p>然后再运行命令</p>
<p>WINEARCH="win32" wine MDAC_TYP.EXE</p>
<p><img src="https://img2020.cnblogs.com/blog/365737/202006/365737-20200613172207866-1678679191.png" alt="" loading="lazy"></p>
<p> </p>
<p> 剩下的就和windows 下一样的,一路安装下去。</p>
<p><img src="https://img2020.cnblogs.com/blog/365737/202006/365737-20200613172301146-1385376143.png" alt="" loading="lazy"></p>
<p> </p>
<p> 安装完,点关闭。</p>
<p>再次打开winecfg</p>
<p>WINEARCH="win32" winecfg</p>
<p>首先把wine 版本改回成win7</p>
<p>然后替换msado 函数</p>
<p><img src="https://img2020.cnblogs.com/blog/365737/202006/365737-20200613172734147-361361666.png" alt="" loading="lazy"></p>
<p> </p>
<p><img src="https://img2020.cnblogs.com/blog/365737/202006/365737-20200613173651382-1189790640.png" alt="" loading="lazy"></p>
<p> </p>
<p> </p>
<p> ok</p>
<p>现在运行命令</p>
<p>WINEARCH="win32" wine Project3.exe</p>
<p><img src="https://img2020.cnblogs.com/blog/365737/202006/365737-20200613172923497-1291727228.png" alt="" loading="lazy"></p>
<p> </p>
<p> 程序跑起来了,但是,但是, 我的中文不显示了。</p>
<p><img src="https://img2020.cnblogs.com/blog/365737/202006/365737-20200613173603948-1147564044.png" alt="" loading="lazy"></p>
<p> </p>
<p> 我们再windows 目录找到字体文件simsun.ttc。</p>
<p>然后把此文件复制到当前用户的.wine 目录,注意这个目录是一个隐藏目录。</p>
<p><img src="https://img2020.cnblogs.com/blog/365737/202006/365737-20200613174003329-977993676.png" alt="" loading="lazy"></p>
<p> </p>
<p> <img src="https://img2020.cnblogs.com/blog/365737/202006/365737-20200613174033410-8057768.png" alt="" loading="lazy"></p>
<p> </p>
<p> 注意上面的路径。</p>
<p>现在我们再次运行</p>
<p><img src="https://img2020.cnblogs.com/blog/365737/202006/365737-20200613174142545-502244272.png" alt="" loading="lazy"></p>
<p> </p>
<p> 完美运行起来了。</p>
<p>当然此处建议win32 的数据库驱动选择使用unidac.使用直连方式,就不用这么复杂了。</p>
<p><img src="https://img2020.cnblogs.com/blog/365737/202006/365737-20200613174539230-1545064761.png" alt="" loading="lazy"></p>
<p> </p>
<p> </p>
<p> </p>
<p>使用unidac 直连方式,就不需要上面的复杂配置,也不用显式指明wine 的运行模式。直接实现了wine 的开箱即用,复制过来就可以运行。</p>
<p>命令更简单了。</p>
<p>wine Project3unidac.exe </p>
<p> </p>
<p> <img src="https://img2020.cnblogs.com/blog/365737/202006/365737-20200613175243605-540758572.png" alt="" loading="lazy"></p>
<p> </p>
<p> 使用wine 运行windows 的应用程序,可以让老程序运行在linux 下,但是开发新的桌面程序,还是建议使用Delphi FMX,这样一套代码</p>
<p>和界面可以直接运行在windows、Linux、macos 上。</p>
<p> </p><br><br>
来源:https://www.cnblogs.com/xalion/p/12827366.html
頁:
[1]