· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.WIN32 —› компиляция DLL имеющая в себе вызовы CRT

Посл.отвђт Сообщенiе


Дата: Мар 3, 2003 16:58:32

Приветствую всех воинов и самураев дЗена.

При попытке скомпилировать dll, которая вызывает crt функцию wsprintf
столкнулся с одной проблемой: линкер говорит следующее:
LINK : error LNK2001: unresolved external symbol __DllMainCRTStartup@12
eddll.dll : fatal error LNK1120: 1 unresolved externals

подстановка в командную строку линкера /ENTRY:_DllMainCRTStartup ничего не дало.

по этому поводу возникли вопросы:
1. как использовать _DllMainCRTStartup и _CRT_INIT применительно для MASMовского линкера?
2. как-же мне всё-таки скомпилировать свою dll?

Заранее благодарен всем.

p.s. неплохо бы было разместить где-нибудь на сайте доку по параметрам командной строки MASMовского линкера.


Дата: Мар 4, 2003 06:32:03

А чем плоха USER32!wsprintfA? Или вам именно CRT?


Дата: Мар 4, 2003 08:01:01

хм, может я чего то не понимаю...
разве есть такая CRT функция wsprintf? Может printf или wprintf?
просветите...plz


Дата: Мар 4, 2003 09:03:46

Именно USER32!wsprintfA я и имел ввиду. А вы попробуйте откомпилировать библиотеку, в которой есть вызов wsprintf.
Если получится, конечно.


Дата: Мар 4, 2003 13:16:16

попробуй
так
/ENTRY:"DllMainCRTStartup"


Дата: Мар 4, 2003 18:07:48

А вы попробуйте откомпилировать библиотеку, в которой есть вызов wsprintf.
Попробовал! Вот что получилось:

-----------------------
wsprintf_dll_test.asm
-----------------------
.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
.DATA
lpFormat db "%d",0
.DATA?
lpOut db 32 dup (?)
.CODE
DllMain PROC hInst:DWORD,reason:DWORD,resvd:DWORD
mov eax,1
ret
DllMain ENDP
ALIGN 4
wsprintf_test PROC
invoke wsprintf,OFFSET lpOut,OFFSET lpFormat,eax
ret
wsprintf_test ENDP
END DllMain

-----------------------
wsprintf_dll_test.def
-----------------------
LIBRARY wsprintf_dll_test
EXPORTS wsprintf_test

Потом,
C:\masm32\Bin\ml /c /coff /Cp /I C:\masm32\Include wsprintf_dll_test.asm
C:\masm32\Bin\Link /SUBSYSTEM:WINDOWS /DLL /DEF:wsprintf_dll_test.def /LIBPATH:C:\masm32\Lib wsprintf_dll_test.obj

И всё компилируется!


Дата: Мар 4, 2003 20:58:38

Ну и чушь...


Дата: Мар 5, 2003 08:27:26

Спасибо за помощь, но дело, как оказалось было не в функции wsprintf. Оказывается, что я просто забыл поставить в конце файла 'End LibMain'.

Ещё раз спасибо всем.


Дата: Мар 7, 2003 16:58:49

Для Quantum:
Попробовал скомпилировать указанный вами пример.
Создал два файла wsprintf_dll_test.asm и wsprintf_dll_test.def
Поменял c:\ на d:\ в командных строках.

OBJ файл создается.
Линкер выдает:
Microsoft (R) Incremental Linker Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
LINK : fatal error LNK1117: syntax error in option ""

Использую masm32 версии 8.
Если нужно подправить не в генах :-), то подскажите где.
Спасибо.


Дата: Мар 7, 2003 18:12:37

misyachniy: У меня всё работает... честное слово :)

Если вы компилируете из командной строки, то лучше попробуйте создать BAT файл и скопируйте туда
D:\masm32\Bin\ml /c /coff /Cp /I D:\masm32\Include wsprintf_dll_test.asm
D:\masm32\Bin\Link /SUBSYSTEM:WINDOWS /DLL /DEF:wsprintf_dll_test.def /LIBPATH:D:\masm32\Lib wsprintf_dll_test.obj

Использую masm32 версии 8.
У меня тоже MASM32 v8, правда с дошлепком от wasm.ru (.NET :), но это не принципиально.


Дата: Мар 11, 2003 11:34:34

>>>У меня всё работает... честное слово :)
Верю :-)У меня нет. :-(
Я обычно пишу под TASM 2.0 консольные утилитки. На MASM32 ничего не писал еще.
Но приколы или проколы в программах есть всегда.
Никак не мог скомпилировать библиотеки под NT DDK, пока не создал папку c:\tmp.
Где же править?


Дата: Мар 12, 2003 11:41:08

Нашел где подправить.
В "/LIBPATH" пролез лишний пробел и получилось "/ LIBPATH".
Спасибо. :-)


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.089