| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > dll написан в VC надо чтоб в Delphi работало |
| Автор: Frikazoid 26.11.2003, 21:31 |
| Доброго времени суток Господа! У меня возник вопрос! Как же всё таки подключить DLL'ку написанную на VC в Delphi? Вот фу-я: int __declspec(dllexport) __stdcall ExtPing(int nCommPort, BOOL bIsIrDA = FALSE); Для импорта её же я написал: function ExtPing(nCommPort:integer; bIsIrDA:boolean=FALSE):integer; external 'Cipher.dll' name 'ExtPing'; пробовал и: function ExtPing(nCommPort:integer; bIsIrDA:boolean):integer; external 'Cipher.dll' name 'ExtPing'; При запуске прложения дебугег говорит, что не может найти точку входа в эту вот процедуру! В чём же моя ошибка? Заранее благодарен за любую помощь! ЗЫ Весь материал http://gleb.by.ru/8000_series.zip ЗЫ 8000 Series Terminal - mazdai.... |
| Автор: stab 26.11.2003, 21:37 | ||
попробуй так:
|
| Автор: stab 26.11.2003, 21:39 | ||||
думаю тебе это поможет:
|
| Автор: pascal 27.11.2003, 10:38 |
| Очень уж любопытно, а как это вообще понимать? то есть по какому принцепу это всё так шифруется? |
| Автор: Frikazoid 27.11.2003, 16:09 |
| cully спасибо! |
| Автор: stab 30.11.2003, 15:30 | ||
Это долбаный компилер C\C++ так обзывает каждую функцию исходя из типов параметров, типа результата и, собственно, самого имени функции. |
| Автор: Frikazoid 5.12.2003, 16:07 | ||
Как вот это вот
Изобразить в дельфях? Спасибо! |
| Автор: oleg1973 6.12.2003, 03:43 |
| нда asm push указатель на имя dll call loadlbrary push указатель на кактамфункциюзовут push eax call getprocaddress end; сия хрень вернет в еах адрес той самой функ которую просили и пофигу на чем написана dll |
| Автор: Frikazoid 6.12.2003, 11:16 |
| да нет! Мне нужно тот класс экспортнуть! |
| Автор: Frikazoid 7.12.2003, 13:27 |
| Ну поможите плз! |
| Автор: stab 7.12.2003, 22:42 |
| почитай здесь: http://forum.vingrad.ru/index.php?act=ST&f=2&t=13274 |
| Автор: Frikazoid 8.12.2003, 15:06 |
| Ну да, помню помню! но тогда я так и не получил нужного мне ответа! |
| Автор: stab 8.12.2003, 18:59 |
| а в чем проблема? что конкретно не получается? |
| Автор: Frikazoid 8.12.2003, 21:07 |
| Ну переведи мне ПЛЗ в дельфёвый вид этот класс. И всё! ПЛЗ! |
| Автор: Dmitry V.Abramov 8.12.2003, 23:21 |
| Frikazoid Классы в каждом языке устроены по-разному. В Delphi и BCB постарались сделать их максимально схожими. И то, нет-нет да слышен вскрик наступившего на очередные грабли несовместимости. Про бинарный перенос классов из MSVC слышать пока не приходилось. Либо proxy-DLL, либо полухакерская адаптация, если для нее оставлены лазейки (как, например, поступили ребята с классами из GDI+). Об этом ведь уже писалось. Причем именно по твоему вопросу. Причем подробно и с вариантами решений. |
| Автор: Frikazoid 9.12.2003, 00:08 |
| короче засада! Я уже вот месяц или больше как бьюсь об эту х...ю |
| Автор: stab 9.12.2003, 19:33 |
| Frikazoid, покажи свои наброски ;) |
| Автор: Frikazoid 9.12.2003, 21:51 |
| Да какие там наброски? Там есть функции, специально предназначенные для использования без применение того самого класса. Они все с префиксом ext, но они все возращают -1! Я не понимаю почему! А с классом я не пробовал! |
| Автор: Frikazoid 12.1.2004, 18:37 |
| Здрасти! Могёте вот это перевести в дельфёвый вид культурно на? Спасибо! int __declspec(dllexport) __stdcall ExtPing(int nCommPort, BOOL bIsIrDA = FALSE); long __declspec(dllexport) __stdcall ExtGetFreeMemory(int nCommPort, BOOL bIsIrDA = FALSE); BOOL __declspec(dllexport) __stdcall ExtGetSerialNumber(LPSTR szData, int nCommPort, BOOL bIsIrDA = FALSE); BOOL __declspec(dllexport) __stdcall ExtGetTime(LPSTR szData, int nCommPort, BOOL bIsIrDA = FALSE); BOOL __declspec(dllexport) __stdcall ExtUpdateTime(int nCommPort, BOOL bIsIrDA = FALSE); int __declspec(dllexport) __stdcall ExtGetCurrentState(LPSTR szData, int nCommPort, BOOL bIsIrDA = FALSE); long __declspec(dllexport) __stdcall ExtGetDataCount(int nDoc, int nCommPort, BOOL bIsIrDA = FALSE); long __declspec(dllexport) __stdcall ExtGetRecordsCount(int nBase, int nCommPort, BOOL bIsIrDA = FALSE); BOOL __declspec(dllexport) __stdcall ExtClearDoc(int nDoc, int nCommPort, BOOL bIsIrDA = FALSE); BOOL __declspec(dllexport) __stdcall ExtClearDatabase(int nBase, int nCommPort, BOOL bIsIrDA = FALSE); int __declspec(dllexport) __stdcall ExtReadData(int nDoc, LPSTR szData, int nCommPort, BOOL bIsIrDA = FALSE); int __declspec(dllexport) __stdcall ExtReadRecord(int nBase, LPSTR szData, int nCommPort, BOOL bIsIrDA = FALSE); BOOL __declspec(dllexport) __stdcall ExtPutRecord(int nBase, LPCSTR szData, int nCommPort, BOOL bIsIrDA = FALSE); BOOL __declspec(dllexport) __stdcall ExtFinish(int nCommPort, BOOL bIsIrDA = FALSE); Санькс... |
| Автор: Frikazoid 12.1.2004, 23:16 |
| Ну плиз! |
| Автор: Unregistered 17.2.2004, 12:33 |
| ... прошло два года... Ребята всё это фигня чё вы тут написали. Подстава в том что __declspec(dllexport) почему-то не работает. Чтобы получить результат необходимо ручками написать def-файл. |
| Автор: Frikazoid 17.2.2004, 12:54 |
| В другой теме ответ! Теперь всё работает! Вот тока траблы с получением данных из Pchar овых полей! |
| Автор: Unregistered 19.2.2004, 11:17 |
| Frikazoid Если не трудно кинь ссылку где ответ нашел. У меня тот же трабл. Уже 2 недели ничего не могу сделать. |
| Автор: <Spawn> 19.2.2004, 12:22 |
| Unregistered возьми любую прогу, умеющую смотреть PE-заголовок и увидишь реальные имена функций. |
| Автор: AlexD 19.2.2004, 12:29 |
| <Spawn> Заголовки я ужо узал два дня назад. У меня так же как и у Frikazoida при использовании функций возникает External Exception. |
| Автор: AlexD 19.2.2004, 12:30 |
| Кстати работаю в CBuilder, но смысл я думаю тотже. |
| Автор: Frikazoid 19.2.2004, 13:14 |
| Дык! То тоже моя тема с этим же вопросом! Просто воспользуйся поиском по моему имени! у меня мало тем! |
| Автор: AlexD 19.2.2004, 14:35 |
| Frikazoid А как именно сделал? Я скачал то что man2002ua прислал, там его dll и проект на делфях, так не пашет он у меня нихрена. Порт открывается а пинг не проходит. |
| Автор: AlexD 20.2.2004, 06:21 |
| Frikazoid Огромная просьба, пришли пожалуйста исходник где хотябы Ping проходит. Порт у меня открывается и закрывается, это единственное что работает. alex@tomladcsh.tomsknet.ru |