Линковка 16-битных .obj в Win32-приложении??
позарез необходимо кое-какие функции из старого 16-битного .obj'а использовать. Проблема в том, что написан он был на асме, а исходники безвозвратно утеряны. Подскажите, что можно сделать? Используем BCB 6, при попытке прилинковать этот .obj линкер ругается - мол, не буду линковать 16-битный код в 32-битное приложение и всё...
Здравствуйте,
позарез необходимо кое-какие функции из старого 16-битного .obj'а использовать. Проблема в том, что написан он был на асме, а исходники безвозвратно утеряны. Подскажите, что можно сделать? Используем BCB 6, при попытке прилинковать этот .obj линкер ругается - мол, не буду линковать 16-битный код в 32-битное приложение и всё...
А ты не пробовал пролинковать через какой-нить masm ?
Но мне кажется obj файл можно прогнать через дизассемблер и где надо сделать ассемблерную всавку в своей программе.
идите сюда http://forum.codenet.ru/showthread.php?threadid=23428
...Когда жертва идет на Зов, она ничего не соображает. Зов ведет ее...
У меня проблема - надо использовать функции из 16-битного объектника в 32-битном приложении.
Хоть под Винду они написаны?
Я сам никогда подобными проблемами не занимался, но наверное, два варианта есть:
- дизассемблировать, и потом или скомпилить 32-битным ассемблером, или сделать вставки в программе
- попробовать собрать 16-битную DLL и сделать thunk к ней
Если написано под DOS, только первый путь подходит. Ну, а решение задачи вторым способом - совершенно другая опера.
"попробовать собрать 16-битную DLL..."
КAK?.. (подробно напиши, плз)
Если собирать DLL так, то в полученной dll нет экспортируемых функции!!! Что не есть гуд!:
// CX24EO1.OBJ - тот самый .obj (в аттаче лежит)
// CDREG - функция из него
#include <vcl.h>
#pragma hdrstop
USEOBJ("CX24EO1.OBJ");
void _export CDREG(unsigned int*,int, int, int, int);
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
{
return 1;
}
В общем-то ничего удивительного: тело фунции CDREG не указано. Как заставить брать его из .obj?
"попробовать собрать 16-битную DLL..."
КAK?.. (подробно напиши, плз)
Каком кверху! Найти Visual C или tlink бородатой версии, собирающей объектники под Win16. Потом tlink /? и вперед. Наверное, придется создавать ручками def-файл (если его еще нет).
В общем-то ничего удивительного: тело фунции CDREG не указано. Как заставить брать его из .obj?
А заголовочный файл к объектнику есть?
Каком кверху! Найти Visual C или tlink бородатой версии, собирающей объектники под Win16. Потом tlink /? и вперед. Наверное, придется создавать ручками def-файл (если его еще нет).
Есть tlink (из ВС3), собирал def_file (только не ручками).
Использовали следующий код, но точку входа в Dll в ВС3 не знаем как написать, может так?..
#include <windows.h>
void FAR _export CDREG(unsigned int*,int, int, int, int);
int WINAPI DllMain(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}
Def_file(кусок для ф-ции CDREG):
LIBRARY CX24EO1.DLL
EXPORTS
...
@CDREG$qpuiiiii @1 ; CDREG(unsigned int*,int,int,int,int)
...
Нет. Гольный объектник... :(