Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Конвертирование DLL(Delphi) -> LIB(Assembler)

35K
07 августа 2008 года
heor
17 / / 20.07.2008
Нужно конвертировать библотеку написанную на дельфях в Lib, что использовать ее в ассембелере. не спрашиваейте зачем, нужно.
Вообщем я делаю так:

библиотека simple.dll Delphi
Код:
library simple;
uses
  SysUtils,
  Classes;
{$R *.res}
procedure SimpleTest;
begin
 asm
  mov eax, 100
 end;
end;
exports SimpleTest;
begin
end.


Конвертирую в lib программой lib.exe вот так lib.exe /def:simple.def /out:simple.lib.

Файл simple.def содержит
 
Код:
LIBRARY      "simple.dll"
DESCRIPTION  'simple.dll'
EXPORTS
 SimpleTest@0


Пишу простую прогу на ассемблере test.asm:
Код:
.386
.model flat,stdcall
option casemap:none
include kernel32.inc
includelib lib/kernel32.lib
includelib simple.lib
SimpleTest PROTO
.const
.code
Main PROC
 call SimpleTest
 invoke ExitProcess, 0
Main ENDP
end Main


Компилирую (использую MASM):
"ml.exe" /c /coff test.asm
"link.exe" /SUBSYSTEM:CONSOLE test.obj

Запускаю Test.exe. Пишет "точка входа в процедуру SimpleTest@0 не найдена в библиотеке DLL simple.dll"

В чем ошибка ???
1.9K
07 августа 2008 года
max_dark
256 / / 11.11.2005
Это позволит использовать invoke
Код:
uses
  SysUtils,
  Classes;
{$R *.res}
procedure SimpleTest;stdcall;
begin
 asm
  mov eax, 100
 end;
end;
exports SimpleTest;
begin
end.
Количество параметров указывать не надо
 
Код:
LIBRARY      "simple.dll"
DESCRIPTION  'simple.dll'
EXPORTS
 SimpleTest
35K
08 августа 2008 года
heor
17 / / 20.07.2008
сделал все как сказали. Вот что выдает при компиляции

test.obj : error LNK2001: unresolved external symbol _SimpleTest@0
test.exe : fatal error LNK1120: 1 unresolved externals
1.9K
08 августа 2008 года
max_dark
256 / / 11.11.2005
Забыл, все забыл :(
test.asm
Код:
.386
    .model flat,stdcall
    option casemap:none
    include \masm32\include\kernel32.inc
    includelib \masm32\lib\kernel32.lib
    includelib .\simple.lib
    SimpleTest PROTO c ;)
.const
.code
Main PROC
    invoke SimpleTest
    invoke ExitProcess, 0
Main ENDP
end Main
simple.dpr
Код:
library simple;
uses
    windows,sysutils;
procedure SimpleTest;cdecl;
begin
    asm
        mov eax,100
    end;
end;
exports
  SimpleTest;
begin
end.
simple.def
 
Код:
LIBRARY simple.dll
DESCRIPTION simple.dll
EXPORTS SimpleTest
build.cmd
Код:
@echo off
echo Clean dir
del *.obj
del *.exp
del *.lib

echo build..
echo test.asm
ml.exe /nologo /c /coff test.asm
lib.exe /nologo /def:simple.def /out:simple.lib /machine:ix86
link /nologo /SUBSYSTEM:CONSOLE test.obj
echo run test.exe
.\test.exe
echo done

Все работает. Проверено
35K
08 августа 2008 года
heor
17 / / 20.07.2008
Работает :)
спасибо...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог