我已经完成了升级最初用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'???????????
返回
程序TextTest(dc&)
$ EXPORT TextTest
SETDC dc&
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&安培; =赢(1)
SETDC GetDC(h&)
'RGBCOLOR 0
'GRAPHMODE R2_COPYPEN
〜@@ TextTest(_DC())
KeyGet k%
CloseW#1
FreeDll 7
结束
我想使用Java / C(或任何其他现代编程语言)重写此TESTTEXT.exe。我想,我需要通过构建另一个dll在这个dll和新的exe之间建立一个桥梁。 我希望得到一些关于编写这个中间dll的帮助。
另外,请告诉我这种解决方案是否有意义!
我们非常感谢您的帮助。 谢谢你的时间。
答案 0 :(得分:2)
使用来自32位应用程序的16位DLL涉及微软称之为“平面thunking”的内容。在16/32位混合版本的Windows(Windows 95,98,98SE,Me)中,只有 可以使用Flat Thunking。
任何合理的当前版本的Windows都不支持您想要的内容。
答案 1 :(得分:0)
我同意杰瑞的观点。在此期间,您可能会开始查看此帖子: http://www.atari-forum.com/viewtopic.php?f=69&t=4826&start=20