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

Вниз

Почему не хочет загружаться процедура из dll.   Найти похожие ветки 

 
cavalera   (2008-06-14 18:36) [0]

Я написал dll на c++ Builder и вызываю её из дельфи. Почему то при запуске программы выдаёт сообщение об ошибке: Точка входа в процедуру FindContours не найдена в библиотеке DLL OCVLib.dll. Скажите в чём ошибка и как её можно исправить.
Код dll
//---------------------------------------------------------------------------

#include <vcl.h>
#include <windows.h>
#include <vcl.h>
#include <cv.h>
#include <highgui.h>
#include <IplConverter.h>
#pragma hdrstop

extern "C" __declspec(dllexport) void FindContours(Graphics::TBitmap &bmp, Graphics::TBitmap outputBmp, int threshould1, int threshould2);
//---------------------------------------------------------------------------

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

void FindContours(Graphics::TBitmap &bmp, Graphics::TBitmap outputBmp, int threshould1, int threshould2)
{
   IplImage *image = TBitmapToIplImage(&bmp);
   IplImage *convertedImage = cvCreateImage( cvSize(image->width, image->height), image->depth, 1 );
   cvSetImageCOI( image, 2 );
   cvCopy( image, convertedImage, 0 );
   cvCanny(convertedImage, convertedImage, threshould1, threshould2, 3 );
   IplImageToTBitmap(convertedImage, &outputBmp);
}

Код программы
unit Main;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ExtCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Image1: TImage;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

procedure FindContours(bmp, outputBmp : TBitmap; t1, t2 : integer); stdcall; external "OCVLib.dll"

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 FindContours(Image1.Picture.Bitmap, Image1.Picture.Bitmap, 200, 50);
end;

end.

Мне говорили что это может быть из-за несовместимости TBitmap (Delphi) с Graphics::TBitmap (C++ Builder). Я пробовал такой код, но та же ошибка
//---------------------------------------------------------------------------

#include <vcl.h>
#include <windows.h>
#include <vcl.h>
#include <cv.h>
#include <highgui.h>
#include <IplConverter.h>
#pragma hdrstop

extern "C" __declspec(dllexport) void FindContours(Graphics::TBitmap &bmp, Graphics::TBitmap outputBmp, int threshould1, int threshould2);
extern "C" __declspec(dllexport) DWORD Summ(DWORD a, DWORD b);
//---------------------------------------------------------------------------

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

void FindContours(Graphics::TBitmap &bmp, Graphics::TBitmap outputBmp, int threshould1, int threshould2)
{
   IplImage *image = TBitmapToIplImage(&bmp);
   IplImage *convertedImage = cvCreateImage( cvSize(image->width, image->height), image->depth, 1 );
   cvSetImageCOI( image, 2 );
   cvCopy( image, convertedImage, 0 );
   cvCanny(convertedImage, convertedImage, threshould1, threshould2, 3 );
   IplImageToTBitmap(convertedImage, &outputBmp);
}

DWORD Summ(DWORD a, DWORD b)
{
   return a + b;
}

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ExtCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Image1: TImage;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

//procedure FindContours(bmp, outputBmp : TBitmap; t1, t2 : integer); stdcall; external "OCVLib.dll"
function Summ(a, b : DWORD) : DWORD; cdecl; external "OCVLib.dll"

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
//  FindContours(Image1.Picture.Bitmap, Image1.Picture.Bitmap, 200, 50);
Caption := IntToStr(Summ(2, 2));
end;

end.


 
tesseract ©   (2008-06-14 23:21) [1]

секция экспорта ? Конечно не будет точки входа.


 
palva ©   (2008-06-15 01:17) [2]

Если говорит нет такого имени, значит нет.
Си вставляет перед именем функции дополнительный символ подчеркивания. Вообще надежнее всего напечатать dll утилитой tdump и посмотреть какие имена библиотека экспортирует. Это имя и нужно указать в паскалевской программе. Либо при построении dll в файле def задайте то имя для экспорта, которое вам нравится



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

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

Наверх




Память: 0.46 MB
Время: 0.005 c
4-1215758422
Thunderstorm
2008-07-11 10:40
2009.08.30
OpenSSL


2-1246522630
Varkan
2009-07-02 12:17
2009.08.30
IdTCPClient1+IdTCPserver1 передача - получение файла


15-1246084442
Student85236
2009-06-27 10:34
2009.08.30
Как жестко перегрузить Windows XP


15-1246515248
Лев
2009-07-02 10:14
2009.08.30
Помогите с SQL


2-1246696231
Gray
2009-07-04 12:30
2009.08.30
Ккак узнать номер выделенной строки в DBGrid?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский