Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];

Вниз

проблема с передачей параметров   Найти похожие ветки 

 
DeimosX7 ©   (2005-03-27 23:16) [0]

Суть проблемы.. Из программы написанной на Ассемблере вызывается DLL написанная с исп-ем KOL, ей в кач-ве параметра передаётся указатель на строку (LPCTSTR). нужно эту строку получить и обработать внутри dll..

Ничего не выходит. Самое смешное.. если dll написать на Ассемблере то всё путём.. параметр получается и обрабатывается нормально.. Где грабли?
вот код dll (упростил до последнего.. лишь бы проверить факт получения параметра.. и всё-равно ничего не выходит)

//------------------------------
library test;
uses
 windows,
 kol;
procedure decode(source:LPCTSTR);export;
begin
showMessage(source^);
end;

exports
decode name "DECODE";

begin
end;
//------------------------------


 
mdw ©   (2005-03-28 11:21) [1]

А параметр из программы как передаешь? Для приведенного кода кода source должен быть в регистре AX. И зачем директива export?


 
SPeller ©   (2005-03-28 13:32) [2]

МОжет stdcall спасет?


 
DeimosX7 ©   (2005-03-28 14:41) [3]

для проверки написал вот такую прогу(MASM):

.386
  .model flat,stdcall
  option casemap:none
  include windows.inc
  include user32.inc
  include kernel32.inc

  includelib user32.lib
  includelib kernel32.lib
 
  .data
  LibName db "jd.dll",0
  FunctionName db "DECODE",0
 
  DllNotFound db "Не могу найти нужную DLL",0
  FunctionNotFound db "Функция не найдена",0
  text db "some текст",0

  .data?
  hLib dd ?                        ; хэндл библиотеки (DLL)
  DecodeAddr dd ?                  ; адpес функции

  .code
  start:
          invoke LoadLibrary,addr LibName
          .if eax==NULL
                  invoke MessageBox,NULL,addr DllNotFound,NULL,MB_OK
          .else
                  mov hLib,eax
                  invoke GetProcAddress,hLib,addr FunctionName

                  .if eax==NULL
                       invoke MessageBox,NULL,addr
FunctionNotFound,NULL,MB_OK
                  .else
                          mov DecodeAddr,eax
                         
                          push offset text
                          call[DecodeAddr]
                  .endif
                  invoke FreeLibrary,hLib
          .endif
          invoke ExitProcess,NULL
end start

экспорт остался от оригинальной библиотеки , он впринципе мешать не должен..
самый смех: вот код библиотеки на MASM - она нормально работает, хотя делает то-же

.386
  .model flat,stdcall

  option casemap:none
  include windows.inc
  include user32.inc
  include kernel32.inc

  includelib user32.lib
  includelib kernel32.lib
 
  .data
    MsgBoxCaption  db "ОК",0
  .data?
   Text     db ?

  .code
  DllEntry proc hInstDLL:HINSTANCE, reason:DWORD, reserved1:DWORD
          mov  eax,TRUE
          ret
  DllEntry Endp

  DECODE proc source:LPCTSTR
      invoke MessageBox, NULL,source,addr MsgBoxCaption, MB_OK
      ret
  DECODE endp

  End DllEntry


как это на KOL состряпать..?
может я делаю что-то не так.?


 
mdw ©   (2005-03-28 15:41) [4]

В Delphi, по умолчанию, передача параметров происходит через регистры EAX, EDX, ECX далее используется стек. Поэтому при вызове procedure decode, source:LPCTSTR нужно  помещать в EAX, а не в стек. Или явно указать используемую модель:  

procedure decode(source:LPCTSTR); StdCall;
begin
showMessage(source^);
end;


 
Владимир Кладов   (2005-03-28 15:53) [5]

опять stdcall.


 
DeimosX7 ©   (2005-03-28 17:14) [6]

а как получить всю строку ?
почему-то таким способом получается только перый символ..


 
mdw ©   (2005-03-28 17:19) [7]

procedure decode(source:LPCTSTR);export;
begin
showMessage(String(source));
end;


 
SPeller ©   (2005-03-28 18:08) [8]

Ептить:
procedure decode(source:LPCTSTR);export; stdcall;


 
DeimosX7 ©   (2005-03-28 20:45) [9]

благодарю .. разгрёбся



Страницы: 1 вся ветка

Форум: "KOL";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.047 c
3-1128085302
ZedeS
2005-09-30 17:01
2005.11.20
Быстая работа с большой базой


11-1110221256
Shanker
2005-03-07 21:47
2005.11.20
Проблемы с установкой Socket


1-1130324832
AlexeyMir
2005-10-26 15:07
2005.11.20
Разделитель целой и дробной частей числа


14-1130681845
lookin
2005-10-30 17:17
2005.11.20
Как понять такую ошибку?


1-1130678446
AlexLines
2005-10-30 16:20
2005.11.20
поиск английских и русских слов в RichEdit





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский