访问16位DLL

时间:2009-12-18 16:03:58

标签: c java-native-interface basic

我已经完成了升级最初用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的帮助。

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

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

2 个答案:

答案 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