2009-12-18 3 views
0

Мне было поручено обновить существующее приложение с 16-битным рабочим столом, первоначально написанное в GFA Basic. Я хочу знать, есть ли возможность доступа к функциям внутри этих 16-разрядных Dll через C/JNI (или любой другой язык программирования). Я предполагаю, что мне нужно написать какую-то промежуточную DLL для доступа к функциям класса Java (или любого другого языка).Доступ к 16-разрядной библиотеке DLL

Например 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 (постоянного &)

$ EXPORT TextTest

SETDC постоянного &

RGBColor 0

Локальная т $ = "Привет мир" + Chr $ (0)

Текст 10, 10, т $ Звуковой сигнал

~ TextOut (DC &, 10, 50, В: т $, Len (т $))

Звуковой сигнал

Возврат

выше файл DLL в свою очередь, используется TESTTEXT.exe

// назначения исполняемый файл

'LNK Exe d: \ testtext.exe

DLL # 7, "dlltest.DLL»

DECL LONG TextTest (Вт)

ENDDLL

OpenW # 1

ч & = Победа (1)

SETDC GetDC (ч &)

' RGBCOLOR 0

'GRAPHMODE R2_COPYPEN

~ @@ TextTest (_DC())

KeyGet к%

CloseW # 1

FreeDll 7

Конец

Я хочу переписать этот TESTTEXT.exe с использованием Java/C (или любого другого языка программирования модератора). Думаю, мне нужно построить мост между этой dll и новым exe, построив еще одну dll. Я надеялся получить некоторую помощь в написании этой промежуточной dll.

Также, дайте мне знать, если это решение имеет смысл!

Ваша помощь будет высоко оценена. Спасибо вам за ваше время.

+0

Ваш вопрос может быть полезен при форматировании кода как кода. – ndim

+0

Спасибо за быстрый ответ. Хотя я разочарован решением .. :( Я наткнулся на эту ссылку: http://www.mvps.org/vbvision/thunks.htm Если я правильно понял эту статью, я бы мог использовать Win32 SDK на моей машине XP и попытаться найти выход из этого беспорядка, написав скрипт thunk. – niobie

+0

@niobie: хотя вы можете запускать файлы SDK на компьютере XP (при условии, что вы можете найти достаточно старый SDK) все еще застрял в том, что то, что вы производите (код, использующий Flat Thunk), будет работать только на Windows 9x/Me. –

ответ

2

Использование 16-разрядной библиотеки DLL из 32-разрядного приложения включает в себя то, что Microsoft называет (называется) «плоский thunking». Flat Thunking доступен только в 16/32-битных гибридных версиях Windows (Windows 95, 98, 98SE, Me).

Что вы хотите, не поддерживается в любой разумно текущей версии Windows.

+0

Джерри справа. Единственный способ, который вы могли бы даже подумать об этом в любой текущей Windows, - написать 16-битную программу, которая загружает 16-разрядную DLL в 16-разрядную виртуальную машину, а затем некоторые предоставляют некоторую инфраструктуру по существу RPC до этого 16 -битный процесс ... очевидно, что это почти неприемлемо. – codekaizen

Смежные вопросы