【问题标题】:Access a 16 Bit DLL访问 16 位 DLL
【发布时间】:2009-12-18 16:03:57
【问题描述】:

我的任务是升级最初用 GFA Basic 编写的现有 16 位桌面应用程序。 我想知道是否有可能通过 C/JNI(或任何其他编程语言)访问这些 16 位 Dll 中的函数。 我想,我必须编写某种中间 DLL 来访问 Java 类(或任何其他语言)的功能。

例如 DLLTEST 有函数的实现

$库 'LNK exe d:\DLLtest.dll

过程 LIBMAIN(hInst&, DSeg&, HpSz&, lpCmd%)

q_dllname$ = "DLLtext.dll" RETVAL 1 ' 如果使用 LIBMAIN,则 RETVAL 必须为 TRUE

返回

过程 WEP(SysExit&) ' #############################################

// SysExit = 1 - ExitWindows

// SysExit = 0 - DLL vrijgegeven

RETVAL 0 ' ?????????????

返回

程序文本测试(dc&)

$EXPORT 文本测试

SETDC 直流&

RGBColor 0

本地 t$ = "Hello world" + Chr$(0)

文本 10、10、t$ 哔声

~TextOut(dc&, 10, 50, V:t$, Len(t$))

哔声

返回

上面的dll文件依次被TESTTEXT.exe使用

//目标exe文件

'LNK Exe d:\testtext.exe

DLL #7,“dlltest.dll”

DECL LONG TextTest(W)

ENDDLL

OpenW #1

h& = Win(1)

SETDC GetDC(h&)

'RGBCOLOR 0

' GRAPHMODE R2_COPYPEN

~@@TextTest(_DC())

KeyGet k%

关闭W #1

FreeDll 7

结束

我想使用 Java/C(或任何其他现代编程语言)重写此 TESTTEXT.exe。我想,我需要通过构建另一个 dll 在这个 dll 和新的 exe 之间建立一座桥梁。 我希望在编写这个中间 dll 方面得到一些帮助。

另外,如果这种解决方案有意义,请告诉我!

您的帮助将不胜感激。 感谢您的宝贵时间。

【问题讨论】:

  • 您的问题可以从将代码格式化为代码中受益。
  • 感谢您的快速回复。虽然我对解决方案感到失望..:( 我遇到了这个链接:mvps.org/vbvision/thunks.htm 如果我正确理解了这篇文章,我想,我可以在我的 XP 机器上使用 Win32 SDK 并尝试找到解决方法通过编写 thunk 脚本搞砸了。
  • @niobie:虽然你可以在 XP 机器上运行 SDK 的东西(假设你能找到一个足够老的 SDK)你仍然坚持你生产的东西(使用 Flat Thunk) 只能在 Windows 9x/Me 上运行。
  • 哦!我现在明白了..这听起来可能有点愚蠢..但我想知道这个 16 位应用程序是如何在 XP 上运行的.. 一些功能受到了损害,但它似乎仍然可以正常工作..
  • @niobie:在 XP 上运行应用程序没有问题,因为从 16 位可执行文件调用 16 位 DLL 不需要 thunking。它只需要在同一个虚拟机中加载两者。 XP 还支持“Genric Thunks”,它在另一个方向工作(使用 32 位 DLL 的 16 位可执行文件)。他们在 Win9x 上支持 flat thunking,因为操作系统本身支持 32 位可执行文件,但操作系统的一部分被编写为 16 位 DLL。由于 XP 不使用 16 位 DLL,因此他们不需要它也不支持它。

标签: c java-native-interface basic


【解决方案1】:

在 32 位应用程序中使用 16 位 DLL 涉及 Microsoft 所说的(称为)“平面转换”。 Flat Thunking在 Windows 的 16/32 位混合版本(Windows 95、98、98SE、Me)中可用。

任何合理的当前版本的 Windows 都不支持您想要的。

【讨论】:

  • 杰瑞说得对。您甚至可以考虑在任何当前 Windows 中执行此操作的唯一方法是编写一个 16 位程序,该程序将 16 位 DLL 加载到 16 位虚拟机中,然后一些提供一些基础架构以本质上 RPC 到那个 16 -bit 进程...显然这是站不住脚的。
【解决方案2】:

我同意杰瑞的观点。与此同时,你可能会开始看这篇文章: http://www.atari-forum.com/viewtopic.php?f=69&t=4826&start=20

【讨论】:

    猜你喜欢
    • 2022-01-20
    • 1970-01-01
    • 2017-02-18
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    • 2018-01-26
    • 2014-07-18
    相关资源
    最近更新 更多