• 在ubuntu 上使用wine 运行Delphi win32 应用


    随着delphi 10.x 系列开始支持Linux 开发,我们的服务器端可以直接支持LInux 服务器了,

    由于客户越来越多使用Linux 作为服务器端, 但是对于过去老的win32 下开发的服务端,一时半会还无法直接转到移植到Linux 下,我们

    需要一个过渡的方法,来保证服务端满足要求。这时候需要使用wine 来实现这种转换。Wine (“Wine Is Not an Emulator” 的首字母缩写)

    是一个能够在多种 POSIX-compliant 操作系统(诸如 Linux,macOS 及 BSD 等)上运行 Windows 应用的兼容层。

    Wine 不是像虚拟机或者模拟器一样模仿内部的 Windows 逻辑,而是將 Windows API 调用翻译成为动态的 POSIX 调用,

    免除了性能和其他一些行为的内存占用,让你能够干净地集合 Windows 应用到你的桌面。

    更多关于wine 的介绍,请移步官网了解

    首先,我们需要在ubuntu安装 wine。这个很简单

    sudo apt install wine.

     安装完后,执行

    wine --version

    显示运行成功。

    我们先试着运行一个kbmmw 的smartbind 例子。因为里面没有网络和数据库的功能。

    在windows 下的界面为:

     把这个exe 拷入到Linux 服务器上,修改成可执行权限。

    在Linux 下运行·

    wine Project1.exe

    非常顺利的执行了。

    现在搞一下常用的比较麻烦的ADO 数据库应用程序

    我们先用delphi 建立一个ado 应用程序,访问sql server 数据库

     这是一个标准的win32 ado 应用程序。在win10 下可以正常运行。

    由于要使用win32 的API,我们使用标志符,说明是win32 应用

    WINEARCH="win32" wine Project3.exe

     运行,出错了

     原因是没有找到ado 相关的一些API。我们需要给wine 安装ado驱动。

    我们首先需要在微软官网上下载MDAC

    https://www.microsoft.com/zh-cn/download/details.aspx?id=5793

     复制到linux 服务器里面

    然后运行

    WINEARCH="win32" winecfg

     将这个地方修改成WINDOWS NT 4.0

     点应用

    然后再运行命令

    WINEARCH="win32" wine MDAC_TYP.EXE

     剩下的就和windows 下一样的,一路安装下去。

     安装完,点关闭。

    再次打开winecfg

    WINEARCH="win32" winecfg

    首先把wine 版本改回成win7

    然后替换msado 函数

     ok

    现在运行命令

    WINEARCH="win32" wine Project3.exe

     程序跑起来了,但是,但是, 我的中文不显示了。

     我们再windows 目录找到字体文件simsun.ttc。

    然后把此文件复制到当前用户的.wine 目录,注意这个目录是一个隐藏目录。

     

     注意上面的路径。

    现在我们再次运行

     完美运行起来了。

    当然此处建议win32 的数据库驱动选择使用unidac.使用直连方式,就不用这么复杂了。

    使用unidac 直连方式,就不需要上面的复杂配置,也不用显式指明wine 的运行模式。直接实现了wine 的开箱即用,复制过来就可以运行。

    命令更简单了。

    wine Project3unidac.exe 

     

     使用wine 运行windows 的应用程序,可以让老程序运行在linux 下,但是开发新的桌面程序,还是建议使用Delphi FMX,这样一套代码

    和界面可以直接运行在windows、Linux、macos 上。

  • 相关阅读:
    elasticsearch query 和 filter 的区别
    java 模拟简单搜索
    filterBuilders 构建过滤器query
    elasticsearch java 索引操作
    lesson4:利用jmeter来压测数据库
    lesson3:使用java代码的方式对不能识别的协议进行压力测试
    lession2:使用HTTP Cookie 管理器来传递cookies值
    lesson1:压测普通网页
    php mysql find_in_set函数 检索单子段 逗号分隔序列
    写出一种排序算法(要写出代码),并说出优化它的方法。(新浪面试题)
  • 原文地址:https://www.cnblogs.com/xalion/p/12827366.html
Copyright © 2020-2023  润新知