Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
 |  |
[c++] нужна компоновка по ординалам!!! как это сделать? 19.03.03 14:38 Число просмотров: 1112
Автор: BXS Статус: Незарегистрированный пользователь
|
Мне нужно не то.
Нужно чтобы компоновщик слинковал мою прогу с моей DLL по ординалам, а не по имени. Ведь в LIB файле есть и то, и другое и компоновщику один пень как связать... Слышал про опцию, которая по дефолту отключена, но если включить ее, то линкер будет делать именно так....
Вот и вопрос: как это сделать и что за опция?
Спасибо
|
<programming>
|
[C++] Как импортировать по ординалу, а не имени? 18.03.03 22:59
Автор: BXS Статус: Незарегистрированный пользователь Отредактировано 19.03.03 14:00 Количество правок: 1
|
VC++. Мне нужно импортировать функции из одной моей DLL по ординалу, а не по имени. Как этого добиться?
И как сказать об этом линковщику? Об этом почему-то нигде не пишут (((
спасибо
|
 |
[C++] Как импортировать функции по ординалу? 19.03.03 14:01
Автор: CZ Статус: Незарегистрированный пользователь
|
> VC++. Хочу импортировать функции по ординалу, а не по > имени. > Как это сделать? > > спасибо
func=GetProcAddress(hModule,(LPCSTR)Ordinal)
|
 |  |
[c++] нужна компоновка по ординалам!!! как это сделать? 19.03.03 14:38
Автор: BXS Статус: Незарегистрированный пользователь
|
Мне нужно не то.
Нужно чтобы компоновщик слинковал мою прогу с моей DLL по ординалам, а не по имени. Ведь в LIB файле есть и то, и другое и компоновщику один пень как связать... Слышал про опцию, которая по дефолту отключена, но если включить ее, то линкер будет делать именно так....
Вот и вопрос: как это сделать и что за опция?
Спасибо
|
 |  |  |
[C++] Тебе нужен не линкер, а либрариан (библиотекарь блин :-))) ) 19.03.03 17:53
Автор: amirul <Serge> Статус: The Elderman
|
> Мне нужно не то. > Нужно чтобы компоновщик слинковал мою прогу с моей DLL по > ординалам, а не по имени. Ведь в LIB файле есть и то, и > другое и компоновщику один пень как связать... Слышал про > опцию, которая по дефолту отключена, но если включить ее, > то линкер будет делать именно так.... > Вот и вопрос: как это сделать и что за опция? Если длл-ка твоя, то в def включить строку:
Файл mydll.def
LIBRARY MYDLL
EXPORTS
MyOrdinalFunc @123
My2ndOrdinalFunc @234
---
После этого собрать либу для этого def-а
lib /def:mydll.def /out:mydll.lib
Далее, все модули собранные с этой либой будут импортить MyOrdinalFunc из mydll.dll по ординалу 123.
Причем lib можно собирать даже без самой dll-ки, то есть иметь для одной и той же dll-ки несколько def-ов, а в проект для нее включить только одну (например, где все экпорты по имени). Это кстати имеет значение еще и в случае если dll-ка не твоя. Чтоб избежать пересечения имен со стандартными либами можно сделать так:
LIBRARY KERNEL32
EXPORTS
OrdinalGetLastError @282
---
Если получить либу из этого def-а, то проимпортировать GetLastError можно будет и из стандартной kernel32.lib (по имени) и из этой новой либы, но с новым именем по ординалу. Хотя я бы не советовал этого делать - мало ли что случится с ординалами в следующем SP.
Вообще в MSDN-е довольно полная дока по def-ам - если еще чего надо ищи там.
> Спасибо
|
 |  |  |  |
[C++] ошибка: unresolved external symbol 19.03.03 18:20
Автор: BXS Статус: Незарегистрированный пользователь Отредактировано 19.03.03 20:48 Количество правок: 1
|
сгенерил lib файл, короче все сделал описанным выше способом...
но вот ошибка: unresolved external symbol.
библиотека как была раньше, так и осталась включенной в проект.... но вот только теперь она не компилится ((
п-о-ч-е-м-у???
|
 |  |  |  |  |
[C++] ошибка: unresolved external symbol 20.03.03 13:12
Автор: :-) <:-)> Статус: Elderman
|
Если функция STDCALL, то в .DEF-файле нужно писать "искаженное" имя:
LIBRARY KERNEL32
EXPORTS
GetLastError@0 @282
|
 |  |  |  |  |  |
[C++] Да и еще 20.03.03 17:50
Автор: amirul <Serge> Статус: The Elderman
|
> Если функция STDCALL, то в .DEF-файле нужно писать > "искаженное" имя: > > LIBRARY KERNEL32 > EXPORTS > GetLastError@0 @282 @0 после GetLastError - это количество байтов, передаваемых в качестве параметров. Лучше всего смотри какое имя вписать как раз в том сообщении линкера - он не обманет. И пиши в def такое имя.
|
|
|