Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Использование кода 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?


можно, если речь идет не о расширении.


Наверх

Титульная страница Поиск, карта сайта Написать письмо