【发布时间】: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