Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.16;
Скачать: CL | DM;

Вниз

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

 
Алексей   (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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 1.419 c
3-1103040271
Iova
2004-12-14 19:04
2005.01.16
Ошибка обращения к Запросу


14-1103869505
Rouse_
2004-12-24 09:25
2005.01.16
C Днем Рождения 24 Декабря


3-1102357690
able
2004-12-06 21:28
2005.01.16
Ещё раз две таблицы связанные


14-1104022330
Johnmen
2004-12-26 03:52
2005.01.16
Открытое письмо


3-1103016178
HDM
2004-12-14 12:22
2005.01.16
ПОИСК ПО БАЗЕ