Главная страница
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.01 c
1-1234886728
Drowsy
2009-02-17 19:05
2010.01.31
DLL BCB из Дельфи


2-1260185234
Гипербореец
2009-12-07 14:27
2010.01.31
TDBGrid и логические поля


6-1211959699
Igor_34
2008-05-28 11:28
2010.01.31
Как узнать пользователя


1-1234792182
@!!ex
2009-02-16 16:49
2010.01.31
Храним HDC окна. Плохо?


3-1233777154
Noir
2009-02-04 22:52
2010.01.31
Обновление