Delphi + линкер от мелкомягких + GetDC = Память не может быть Written!

Тема в разделе "WASM.BEGINNERS", создана пользователем kalexi, 23 окт 2009.

  1. kalexi

    kalexi New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2007
    Сообщения:
    43
    Есть вот такой способ клипать проекты: http://pblog.ru/?p=90
    Я объявляю функции:

    Код (Text):
    1. function CreateWindowEx(dwExStyle: DWORD; lpClassName: PChar; lpWindowName: PChar; dwStyle: DWORD; X, Y, nWidth, nHeight: Integer; hWndParent: HWND; hMenu: HMENU;    hInstance: HINST; lpParam: Pointer): HWND; stdcall; external user32 name '_CreateWindowExA@48';
    2.  
    3. function GetDC(hWnd: Integer): integer; stdcall; external user32 name 'GetDC@4';
    С CreateWindowEx проблем нет!

    В Bat файле:
    Код (Text):
    1. @echo off
    2. DCC32 -JP project.PAS
    3. @LINK /ALIGN:4 /FORCE:UNRESOLVED /SUBSYSTEM:WINDOWS /MERGE:.data=.text /MERGE:.rdata=.text /ENTRY:main$qqrv /STUB:stub.bin user32.lib project.obj
    4. @DEL project.DCU
    5. @DEL project.OBJ
    6. pause
    Все нормально комплируется, вывод линкера:
    Но при запуске программы в момент вызова GetDC вылетает, что память по адресу... не может быть Written.

    В чем может возникать проблема?!

    ---
    И еще один вопрос: знает ли кто, "@число" в имени объявляемой функции это размер занимаемый указателями на параметры функции (количество_параметров * 4)?
     
  2. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    kalexi
    как-же она у тебя вообще создаётся после этого
    ты там что запускаешь?
     
  3. kalexi

    kalexi New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2007
    Сообщения:
    43
    wsd
    HandleFinally я замечал в дебагере, что это - понятия не имею.
    Линковка проходит нормально.
    Он не находит в библиотеке GetDC? Этож какже?! :/
     
  4. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    А он не думает. Этот ключик нужен, чтобы слинковать "кривым" способом не учитывая ненужные внешние проги. Но без GETDC получаем то, что имеем.
     
  5. kalexi

    kalexi New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2007
    Сообщения:
    43
    Нужно линковать еще какие-то либы?!
     
  6. 4lulz

    4lulz New Member

    Публикаций:
    0
    Регистрация:
    25 окт 2009
    Сообщения:
    4
    kernel32.lib же
     
  7. 4lulz

    4lulz New Member

    Публикаций:
    0
    Регистрация:
    25 окт 2009
    Сообщения:
    4
    Блин туплю...
     
  8. kalexi

    kalexi New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2007
    Сообщения:
    43
    Код (Text):
    1. @LINK /ALIGN:4 /SUBSYSTEM:WINDOWS /MERGE:.data=.text /MERGE:.rdata=.text /ENTRY:main$qqrv /STUB:stub.bin user32.lib kernel32.lib project.obj
    Линкую, вылетает тоже самое. Пытался и SHELL32.LIB линковать

     
  9. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    И что вы хотели от такой записи. Где подчеркивание?
     
  10. kalexi

    kalexi New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2007
    Сообщения:
    43
    Какое подчеркивание?
     
  11. kalexi

    kalexi New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2007
    Сообщения:
    43
    А,вначале? Походу прокалило, но осталось это:
    Код (Text):
    1. error LNK2001: unresolved external symbol @@HandleFinally$qqrv
     
  12. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    function GetDC(hwnd: integer): integer; stdcall; external 'USER32.DLL';
     
  13. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Ну так теперь можно вернуть /FORCE:UNRESOLVED
    Эта функция нафиг не нужна.
    Гурманы могут попробовать изготовить obj с этим входом и секциями нулевой длины.
    Но по моему линкер не берет такие имена.
     
  14. kalexi

    kalexi New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2007
    Сообщения:
    43
    Огромное спасибо!
     
  15. kalexi

    kalexi New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2007
    Сообщения:
    43
    Да, вопрос, знак подчеркивания в функциях, он должен быть во всех функциях?