![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Использование кода CB в D [D5, D6, D7, Win2k, WinXP]
bns © (2005-06-08 14:37:00)Есть программа с текстами для CBuilder. Мне нужно вызывать методы этой программы из кода на D5/D7. Можно ли это сделать, не используя DLL?
Если вопрос тривиален, ткните в место, где можно об этом узнать.
Спасибо.
PVOzerski (2005-06-09 17:52:00) [1]NetGetDCName - это из NETAPI32.DLL,
_strlen, _printf, _sprintf, _strcat есть, например, в crtdll.dll,
а вот __Return_unwind и @__InitExceptBlockLDTC - штуки, видимо, специфические для Borland... Либо реализовывать самому, либо выдирать из RTL. Хорошо, если хотя бы какая-то дока есть по этим функциям.
pasha_golub (2005-06-09 17:45:00) [2]bns (09.06.05 17:25) [10]
О чем и говорилось ранее... Надо тянуть за собой Сишную RTL.
Я тоже это пытался сделать. Такого гемора в жизни своей не видывал.
Короче, мой вам совет юзайте dll.
PVOzerski (2005-06-09 17:45:00) [3]Да всё ты так делал... Разве что путь к хедеру для паскального компилятора не нужен. Просто прогноз оправдался: потянулись системные функции.
bns (2005-06-09 17:25:00) [4]А можно спросить про тонкости процесса? В Delphi прописал search path к obj файлу и файлу .h проекта. После компиляции нашлись ошибки:
[Error] Unsatisfied forward or external declaration: '__Return_unwind'
[Error] Unsatisfied forward or external declaration: '@__InitExceptBlockLDTC'
[Error] Unsatisfied forward or external declaration: '_strlen'
[Error] Unsatisfied forward or external declaration: 'NetGetDCName'
[Error] Unsatisfied forward or external declaration: '_printf'
[Error] Unsatisfied forward or external declaration: '_sprintf'
[Error] Unsatisfied forward or external declaration: '_strcat'
Что я не так делал?
Спасибо.
PVOzerski (2005-06-08 17:18:00) [5]Если программа использует минимум библиотек (и хорошо, если она написана действительно на C, а не на C++, и, соответственно, не использует классов), можно попытаться с минимумом модификаций скомпилировать ее в obj-файл и статически прилинковать. Правда, куски сишной RTL в том или ином виде потянутся вслед почти наверняка, и придется либо разбирать на модули сишную RTL, либо привязываться к какой-нибудь crtdll.dll, либо переписывать эти функции с теми же именами на паскале (ну, или на си :) )...
bns (2005-06-08 17:13:00) [6]я, наверное, нечетко изложил проблему. Речь идет вот о чем: есть программа на С для CBuilder-a, есть ее текст. Хочется не портируя этот текст на pascal, не пользуясь dll, вызывать процедуры и функции программы на С из другой программы, написанной на паскале.
Если это можно сделать, пожалуйста, несколько инструкций, как это можно сделать.
Digitman (2005-06-08 16:47:00) [7]
> На уровне линковки obj-файла, можно так сделать?
какие нафих obj-файлы, коль речь идет о готовомприложении, сверстанном в чем угодно (в дан.случае - по горизонту в чем), в т.ч. и в СВВ ?
Erik1 (2005-06-08 16:38:00) [8]По идее можно.
bns (2005-06-08 15:09:00) [9]Не хочется в COM залезать. На уровне линковки obj-файла, можно так сделать?
Digitman (2005-06-08 14:46:00) [10]
> Что имеется в виду под словом "расширение"?
расширение имени файла
> процедуры и функции
сделай эту программу внешним олей/СОМ-сервером
bns (2005-06-08 14:44:00) [11]ну, виноват: не методы, а процедуры и функции.
Что имеется в виду под словом "расширение"?
TUser (2005-06-08 14:40:00) [12]Не уверен, но кажется можно с использованием bpl.
Digitman (2005-06-08 14:40:00) [13]
> методы этой программы
у программы нет понятия "метод"
> Можно ли это сделать, не используя DLL?
можно, если речь идет не о расширении.