访问 16 位 DLL

问题描述 投票:0回答:2

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

例如DLLTEST有函数的实现

$Library
'LNK Exe  d:\DLLtest.dll

Procedure LIBMAIN(hInst&, DSeg&, HpSz&, lpCmd%)

  q_dllname$ = "DLLtext.dll"
  RETVAL 1  ' If LIBMAIN is used, then RETVAL must be TRUE

Return
  
Procedure WEP(SysExit&) 
                 ' ##############################################

  // SysExit = 1 - ExitWindows

  // SysExit = 0 - DLL vrijgegeven

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

Return
  
Procedure TextTest(dc&)

  $EXPORT TextTest

  SETDC dc&

  RGBColor 0
  
  Local  t$ = "Hello world" + Chr$(0)

  Text 10, 10, t$
  Beep

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

  Beep

Return

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

// destination exe file

'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%

CloseW # 1

FreeDll 7

End

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

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

我们将非常感谢您的帮助。谢谢您的宝贵时间。

c java-native-interface basic
2个回答
2
投票

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

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


0
投票
我同意杰瑞的观点。与此同时,您可能会开始查看这篇文章:

http://www.atari-forum.com/viewtopic.php?f=69&t=4826&start=20

© www.soinside.com 2019 - 2024. All rights reserved.