Форум: "Основная";
Текущий архив: 2010.01.31;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.004 c