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

Вниз

DLL BCB из Дельфи   Найти похожие ветки 

 
Drowsy   (2009-02-17 19:05) [0]

Из DLL написанной в ВСВ (C_GRAPH_DDL.dll) экспортируется процедура

// ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
 void __declspec(dllexport) __stdcall DrawLiks(TGraphicControl * TPB)
// Нарисовать объект в указанных координатах
// ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
{

TCanvas *PBC =  NULL;
TPaintBox *PB = dynamic_cast<TPaintBox *>(TPB);
if(PB)
{
 PBC = PB->Canvas;
}
else
{
 TImage *PI = dynamic_cast<TImage *>(TPB);
 if(PI)
 {
   PBC = PI->Canvas;
 }
}

if (PBC){
  // что-то рисуется...
}

}

Если вызывать её из программы на ВСВ, то всё нормально, а если
из Дельфи, где

type
 TForm1 = class(TForm)
   Button1: TButton;
 PntBox : TPaintBox;
 Panel1 : TPanel;
...
end;

procedure DrawLiks(TPB : TGraphicControl); stdcall;
external "C_GRAPH_DDL.dll" name "@DrawLiks$qqsp24Controls@TGraphicControl";

procedure TForm1.Button1Click(Sender: TObject);
begin
DrawLiks(PNTBox);
end;

то экспортируемая процедура не распознаёт PntBox, как TPaintBox.
Как исправить?
Спасибо!


 
icWasya ©   (2009-02-18 10:07) [1]

И не будет, поскольку RTTI у приложения и DLL разные.

Лучше свё-таки так

// ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
void __declspec(dllexport) __stdcall DrawLiks(THandle H)
// Нарисовать объект в указанных координатах
// ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
{

TCanvas *PBC =  new TCanvas;
PBC->Handle = H;

if (PBC){
 // что-то рисуется...
}

}

и

type
TForm1 = class(TForm)
  Button1: TButton;
PntBox : TPaintBox;
Panel1 : TPanel;
...
end;

procedure DrawLiks(THandle H); stdcall;
external "C_GRAPH_DDL.dll" name "@DrawLiks$qqsp24Controls@TGraphicControl";

procedure TForm1.Button1Click(Sender: TObject);
begin
 DrawLiks(PNTBox.Canvas.Handle);
end;


 
Drowsy   (2009-02-18 12:56) [2]


>
> TCanvas *PBC =  new TCanvas;
> PBC->Handle = H;

Компилятор ругается :
[C++ Error] En_draw.cpp(66): E2034 Cannot convert "unsigned int" to "void *"


 
Drowsy   (2009-02-18 14:31) [3]

Если так,

>
> // ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
> void __declspec(dllexport) __stdcall DrawLiks(HDC H)  // не THandle, а HDC
ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН


то DLL и прога на Дельфи компилируется и работает, но на канвасе ничего не вырисовывается.


 
Drowsy   (2009-02-18 15:40) [4]

С хендлом ничего не понял, но заработало... :)

Василий, огромное спасибо! Будешь в Санкт-Петербурге - ставлю коньяк!



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

Текущий архив: 2010.01.31;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.012 c
15-1259011816
Юрий
2009-11-24 00:30
2010.01.31
С днем рождения ! 24 ноября 2009 вторник


15-1259388260
Leprik
2009-11-28 09:04
2010.01.31
Удалить cookies из памяти TWebBrowser


2-1260262105
ford
2009-12-08 11:48
2010.01.31
TidHTTP прервать по таймауту


15-1259282883
Дмитрий С
2009-11-27 03:48
2010.01.31
Вопрос по настройке DNS


15-1259443816
Юрий
2009-11-29 00:30
2010.01.31
С днем рождения ! 29 ноября 2009 воскресенье