C 访问16位DLL

C 访问16位DLL,c,java-native-interface,basic,C,Java Native Interface,Basic,我的任务是升级原来用GFA Basic编写的现有16位桌面应用程序。 我想知道是否有可能通过C/JNI(或任何其他编程语言)访问这些16位DLL中的函数。 我想,我必须编写某种中间DLL来访问Java类(或任何其他语言)的功能 例如 DLLTEST具有功能的实现 $Library 'LNK Exe d:\DLLtest.dll 程序LIBMAIN(hInst&,DSeg&,HpSz&,lpCmd%) q_dllname$=“DLLtext.dll” RETVAL 1'如果使用LIBMAIN,则R

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

例如 DLLTEST具有功能的实现

$Library '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 Vrijgeven

检索0'

返回

程序文本测试(dc&)

$EXPORT TextTest

SETDC dc&

RGB颜色0

本地t$=“你好世界”+Chr$(0)

文本10,10,t$ 嘟嘟声

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

嘟嘟声

返回

TESTTEXT.exe依次使用上述dll文件

//目标exe文件

'LNK Exe d:\testtext.Exe

DLL#7,“dlltest.DLL”

DECL长文本测试(W)

ENDDLL

OpenW#1

h&=Win(1)

SETDC-GetDC(h&)

'RGBCOLOR 0

'GRAPHMODE R2_复写笔

~@@TextTest(\u DC())

KeyGet k%

关闭#1

FreeDll 7

结束

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

另外,请让我知道这种解决方案是否合理

非常感谢你的帮助。
谢谢您的时间。

使用32位应用程序中的16位DLL涉及到Microsoft所称的“扁平敲击”。Flat Thunking仅在16/32位混合版本的Windows(Windows 95、98、98SE、Me)中可用


您想要的东西在任何合理的当前版本的Windows上都不受支持。

我同意Jerry的观点。在此期间,您可以开始阅读以下帖子:

杰瑞说得对。在任何当前的Windows中,您都可以考虑这样做的唯一方法是编写一个16位程序,在16位虚拟机中加载16位DLL,然后一些程序提供一些基础结构,基本上将RPC转移到该16位进程。。。显然这是站不住脚的。将代码格式化为代码可能会对您的问题有所帮助。感谢您的快速回复。虽然我对这个解决方案感到失望。:(我遇到了这个链接:如果我正确理解了这篇文章,我想,我可以在我的XP机器上使用Win32 SDK,并尝试通过编写thunk脚本来找到摆脱这种混乱局面的方法。@niobie:尽管你可以在XP机器上运行SDK(假设你能找到足够旧的SDK)你仍然被一个事实所困扰,那就是你所产生的(代码使用的是平缓的重击声)将只在Windows 9x/Me上运行。噢!我现在明白了。这听起来可能有点愚蠢。但我想知道这个16位应用程序如何仍在XP上运行。一些功能已被破坏,但似乎仍能正常工作。@niobie:在XP上运行应用程序不是问题,因为从16位可执行文件调用16位DLL不会有问题不需要Thunks。它只需要在同一个虚拟机中加载这两个文件。XP还支持“Genric Thunks”,它在另一个方向工作(使用32位DLL的16位可执行文件).他们在Win9x上支持直接下载,因为操作系统本身支持32位可执行文件,但部分操作系统是以16位DLL编写的。因为XP不使用16位DLL,所以他们不需要也不支持它。