Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];

Вниз

Использование функций из библиотеки   Найти похожие ветки 

 
Алексей   (2004-12-30 11:44) [0]

Специалисты! Помогите чайнику:
мне необходимо использовать в программе библиотеку
"updatecdb.dll" написанную на С++, однако функции почему-то не загружаются (dll загружаю статически). Получаю сообщение:
"Точка входа в процедуру postINM не найдена в библиотеке DLL
updatecdb.dll!"

часть кода:
....
implementation

{$R *.dfm}

function init:integer;external "updatecdb.dll" name "init";
function postINM (InmBinID:integer):integer;external  "updatecdb.dll" name "postINM";
...

procedure TForm1.SpeedButton1Click(Sender: TObject);
var
...
itog,InmBinID:integer;
...
begin
try
...
itog:=postINM(InmBinID);
...
end;

Такая же библиотека, созданная мною средствами Delphi 7, функционирует без проблем.
Подскажите в чем дело!


 
Skier ©   (2004-12-30 11:48) [1]

а в case sensitive не может быть дело ?


 
Digitman ©   (2004-12-30 11:48) [2]


> Получаю сообщение:
> "Точка входа в процедуру postINM не найдена в библиотеке
> DLL
> updatecdb.dll!"


значит, эксп.ф-ции с указанным тобой именем в этой библ-ке действительно нет.


 
Sancho ©   (2004-12-30 11:50) [3]

Соглашения о вызовах. stdcall + F1


 
Sancho ©   (2004-12-30 11:53) [4]

Упс, ошибочка

> Алексей   (30.12.04 11:44)  
> "Точка входа в процедуру postINM не найдена в библиотеке
> DLL
> updatecdb.dll!"

А вот это-то я не удосужился прочитать...пардон.


 
Алексей   (2004-12-30 11:54) [5]

Разработчик библиотеке бьет себя в грудину, что эти фунции в библиотеке есть и объявлены на exports.
Пробовал и stdcall - аналогично.


 
Sancho ©   (2004-12-30 11:57) [6]


> Алексей   (30.12.04 11:54) [5]
> Разработчик библиотеке бьет себя в грудину, что эти фунции
> в библиотеке есть и объявлены на exports.
> Пробовал и stdcall - аналогично.

А может надо чтоб не он себе, а ты ему, и не в грудину, а в бубен :-)))


 
Digitman ©   (2004-12-30 11:57) [7]


> Алексей   (30.12.04 11:54) [5]


> Разработчик библиотеке бьет себя в грудину


доверяй, но проверяй)
благо инструментария для просмотра потрохов библиотек - навалом ..


> фунции в библиотеке есть и объявлены на exports


а это самый "бьющий в грудину" случаем не метод объекта экспортировал ?


 
Алексей   (2004-12-30 12:01) [8]

Sancho! Дельный совет, попробую.

Digitman, вот это я не знаю, буду выяснять, может и по совету Sancho.


 
Digitman ©   (2004-12-30 12:09) [9]


> Алексей   (30.12.04 12:01) [8]
> вот это я не знаю


не знать это именно тебе - может и не грех .. хотя выяснить истину - раз плюнуть ..

а вот не знать самому разработчику, чего он там "наэкспортировал" и впарил тебе тряся грудиной - вот за это, "по совету Sancho", можно и в бубен)


 
Алексей   (2004-12-30 12:11) [10]

Digitman, подскажи, как можно выяснить истину.


 
У   (2004-12-30 12:26) [11]

Посмотри tdump"ом эту ДЛЛ -
какие имена там на самом деле.


 
Алексей   (2004-12-30 12:27) [12]

>а это самый "бьющий в грудину" случаем не метод объекта экспортировал ?
>не знать это именно тебе - может и не грех .. хотя выяснить истину - раз плюнуть ..

Digitman, подскажи, как можно выяснить истину.


 
Алексей   (2004-12-30 12:30) [13]

Digitman, спасибо!

Всем большое спасибо, с наступающим Новым годом!
Удачи!


 
Digitman ©   (2004-12-30 12:35) [14]


> Алексей   (30.12.04 12:30) [13]


нашел в чем беда была ?
рассказал бы хоть ... интересно же)


 
Алексей   (2004-12-30 12:38) [15]

Digitman

Пока не нашел, буду звонить и пытать разработчика.
Результат "пыток" сообщу


 
У   (2004-12-30 12:41) [16]

так ты посмотрел tdump"ом?
может, там банальный манглинг имён?


 
Алексей   (2004-12-30 13:39) [17]

Digman
Посмотрел: с именами проблем нет, но у меня вызывает сомнение следующий код (правда в С++ я полный "БМП" - без малейшего поятия)

Содержимое файла "updatecdb.h":
#ifndef _updatecdb.h
#define _updatecdb.h

#ifdef __DLL__
//# define DLL_EI __declspec(dllexport)
#define EXPORT_TYPE__export
#else
//# define DLL_EI __declspec(dllimport)
#define EXPORT_TYPE __import
#endif
...
extern "C" int DLL_EI init(void);
extern "C" int DLL_EI postINM(int y);
...
#endif

Код файла "updatecdb.cpp":

//---------------------------------------------------------------
#include <vcl.h>
#include <windows.h>
#include "updatecdb.h"
#pragma hdrstop

#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
       return 1;
}
//---------------------------------------------------------------
int init()
{
...
  return 0;
}
//---------------------------------------------------------------

int postINM(int y)
{
...
  return y;
}
//---------------------------------------------------------------


 
Digitman ©   (2004-12-30 13:50) [18]


> Посмотрел: с именами проблем нет


не понял ... ты в исходник что ли смотрел ?
нафих он тебе сдался, этот исходник) ... разработчик вполне мог с бодуна передать тебе текст, НЕ являющийся оригиналом для реально построенного им DLL-файла, переданного тебе для юзанья ..

тебя про результаты исследования dll-файла tdump"ом спросили ..
и каковы они ?


 
Eraszer   (2004-12-30 17:03) [19]

используй диррективу cdecl


 
Алексей   (2004-12-30 18:38) [20]

Eraszer

Пробовал - не помогает.


 
DiamondShark ©   (2004-12-30 19:26) [21]

Ну так посмотри tdump-ом или ещё какой утилитой точные имена экпортируемых функций.


 
Алексей   (2004-12-30 21:41) [22]

Digitman
Eraszer
DiamondShark

Спасибо большое всем за помощь! Особенно Digitman Eraszer и DiamondShark! Я понимаю, что спасибо слишком много, а стакан "красненького" в самый раз, но как говаривал один маршал: "Все, что могу".
Теперь суть дела:
1) просмотрел tdump-ом - в именах функций добавлен дефис, то есть вместо имени "init" стоит имя "_init" и ,соответственно, вместо "postInm" - "_postInm";
2) необходимо использовать директиву "cdecl".

Еще раз Всем спасибо и с наступающим Новым годом! Удачи!



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.037 c
14-1103965671
Rouse_
2004-12-25 12:07
2005.01.16
C Днем Рождения 25 Декабря


4-1101539901
DelphiN!
2004-11-27 10:18
2005.01.16
Свойства ярлыка


14-1104007228
Rostislav Rotaru
2004-12-25 23:40
2005.01.16
Помогите с настройкой модема Zyxel для доступа извне.


1-1104740440
SMT
2005-01-03 11:20
2005.01.16
Определение ширины строки в пикселах для компонента memo


14-1103821641
Stef
2004-12-23 20:07
2005.01.16
Вопрос об авторских правах





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский