видно что используется (но я неиспользую явно _strcpy и _strlen !!!)
как в C++ перекрыть их ,чтоб невидно было ???
ну используется и пусть,
обьявлять в Delphi буду только MainRR для использования
Re: Перекрыть _strcpy , чтоб невидно было в obj
От:
Аноним
Дата:
03.02.06 19:44
Оценка:
Что значит явно не твое? strcpy(... — твое. Значит и _strcpy — твое.
Здравствуйте, Аноним, Вы писали:
А>скомпилил t.cpp (Builder5.5) в t.obj (9 kb)
А>В Delphi 5 пишу подключаю
А>implementation
А>
А>{$R *.DFM}
А>{$LINK t.obj}
А>end.
А>
А>Не Delphi не может скомпилить выдает
А>Unsatisfied forward or external declaration: '_strlen' А>Unsatisfied forward or external declaration: '_strcpy'
А>явно немое, в t.cpp
А>
А>#include <windows.h>
А>#pragma hdrstop
А>extern"C" _stdcall BOOL MainRR(DWORD mode)
А>// одна функция
А>{
А> strcpy(...
А>}
А>
А в функции MainRR вызываешь strcpy? И это называется — не используешь?
А> А>видно что используется (но я неиспользую явно _strcpy и _strlen !!!) А>как в C++ перекрыть их ,чтоб невидно было ??? А> ну используется и пусть, А>обьявлять в Delphi буду только MainRR для использования
Re[2]: Перекрыть _strcpy , чтоб невидно было в obj
От:
Аноним
Дата:
03.02.06 21:30
Оценка:
А>> strcpy(...
N>А в функции MainRR вызываешь strcpy? И это называется — не используешь?
ок! и что теперь делать ??
всегда делают (по книге ) линкуют {$LINK *.obj}
а потом заним обьявляют функции которые нужно оттуда взять,
strcpy мне ненадо,я его необьявлял extern
и он не должен виден за пределами модуля
strcpy я необьявлял значит в obj он должен быть уже переведен в код,
почему тогда на MessageBox непишет ошибку?
Re[3]: Перекрыть _strcpy , чтоб невидно было в obj
Здравствуйте, Аноним, Вы писали:
А>ок! и что теперь делать ??
А>всегда делают (по книге ) линкуют {$LINK *.obj} А>а потом заним обьявляют функции которые нужно оттуда взять,
Это работает в случае:
1) функции в этом obj-файле не используют функции из других obj-файлов и библиотек.
2) Функции в этом obj-файле используют функции из других obj-файлов и библиотек,
но в настройкх проекта явно указано использовать соответствующие lib, obj, bpl/bpi файлы
при сборке проекта.
А>strcpy мне ненадо,я его необьявлял extern А>и он не должен виден за пределами модуля А>strcpy я необьявлял значит в obj он должен быть уже переведен в код, А>почему тогда на MessageBox непишет ошибку?
В твоем файле t.obj _нет_ кода функции strcpy, а есть всего лишь указание,
что код этой функции находится вне этого obj-файла, т.е. в других модулях/
библиотеках. В obj-файле имеются две специальных таблицы — экспорта и импорта.
в таблице экспорта описывается, какие функции и переменные, реализованные в
этом модуле, могут быть использованы в других модулях.
В таблице импорта перечислены функции, используемые в этом модуле, код которых находится
где-то в других модулях (то, что у тебя написано в разделе EXTDEF в дамп-файле).
При сборке проекта специальная программа линкер/компоновщик анализирует эти
таблицы во всех obj и lib файлах, выясняет, какие функции и переменные где
находятся (осуществляет "resolving"), и формирует уже сам exe/dll/bpl файл,
где уже есть код всех используемых функций (или указание искать эти функции
в конкретных dll/bpl библиотеках; этот поиск осуществляется уже при загрузке
приложения).
Код непосредственно функций strcpy и strlen находится в библиотеке CRT (C Run-Time library)
aka RTL, которая неявно используется при сборке C/C++ приложений.
Чтобы решить твою проблему теоретически есть два способа:
1) Указать в настройках проекта использовать соответствующую библиотеку CRT
(lib-файл), название которого нужно смотреть в документации по использованному
тобой комилятору С/С++.
2) Реализовать твои функции в отдельной dll, собираемой с помощью C++ Builder
или другого компилятора C/C++. А уже эту dll использовать в своей программе
на Delphi. Мне этот вариант кажется более предпочтительным, потому что здесь нет
привязки к конкретным версиям и названиям стандартных библиотек Delphi и C++ Builder.
Соотетственно при использовании новых версий этих сред не возникнет дополнительных проблем.
Чтобы получить более конкретные рекоммендации, советую обратиься в форум "Delphi & Builder".