Мне нужно не то.
Нужно чтобы компоновщик слинковал мою прогу с моей DLL по ординалам, а не по имени. Ведь в LIB файле есть и то, и другое и компоновщику один пень как связать... Слышал про опцию, которая по дефолту отключена, но если включить ее, то линкер будет делать именно так....
Вот и вопрос: как это сделать и что за опция?
[C++] Как импортировать по ординалу, а не имени?18.03.03 22:59 Автор: BXS Статус: Незарегистрированный пользователь Отредактировано 19.03.03 14:00 Количество правок: 1
VC++. Мне нужно импортировать функции из одной моей DLL по ординалу, а не по имени. Как этого добиться?
И как сказать об этом линковщику? Об этом почему-то нигде не пишут (((
спасибо
[C++] Как импортировать функции по ординалу?19.03.03 14:01 Автор: CZ Статус: Незарегистрированный пользователь
Мне нужно не то.
Нужно чтобы компоновщик слинковал мою прогу с моей DLL по ординалам, а не по имени. Ведь в LIB файле есть и то, и другое и компоновщику один пень как связать... Слышал про опцию, которая по дефолту отключена, но если включить ее, то линкер будет делать именно так....
Вот и вопрос: как это сделать и что за опция?
Спасибо
[C++] Тебе нужен не линкер, а либрариан (библиотекарь блин :-))) )19.03.03 17:53 Автор: amirul <Serge> Статус: The Elderman
> Мне нужно не то. > Нужно чтобы компоновщик слинковал мою прогу с моей DLL по > ординалам, а не по имени. Ведь в LIB файле есть и то, и > другое и компоновщику один пень как связать... Слышал про > опцию, которая по дефолту отключена, но если включить ее, > то линкер будет делать именно так.... > Вот и вопрос: как это сделать и что за опция? Если длл-ка твоя, то в def включить строку:
После этого собрать либу для этого 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-ам - если еще чего надо ищи там.
> Если функция STDCALL, то в .DEF-файле нужно писать > "искаженное" имя: > > LIBRARY KERNEL32 > EXPORTS > GetLastError@0 @282 @0 после GetLastError - это количество байтов, передаваемых в качестве параметров. Лучше всего смотри какое имя вписать как раз в том сообщении линкера - он не обманет. И пиши в def такое имя.