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

Вниз

Почему DLL сделанная в KOL не работает ?   Найти похожие ветки 

 
titnn   (2003-04-15 22:59) [0]

делаю DLL на VCL , работает без проблем , Dll практически пустая , только форма и кнопка , тоже самое на KOL нифига не работает , при попытке открыть форму вылетает
---------------------------
Аccess violation at address 02CBCE8B in module "xxx.dll". Read of address 00000018.
---------------------------
может есть какие хитрости ?


program xxx;
uses
KOL,
Windows, Messages, SysUtils, Variants, Classes,


Unit2 in "Unit2.pas" {Form2},
Unit1 in "Unit1.pas";
//{$R *.res}

begin // PROGRAM START HERE -- Please do not remove this comment

{$IFDEF KOL_MCK} {$I xxx_0.inc} {$ELSE}

Application.initialize;
Application.CreateForm(TForm2, Form2);
Application.run;

{$ENDIF}

end.


unit Unit1;

interface

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

type

PLG_INFO = packed record
hdrVer: DWORD;
dwType: DWORD;
dwTTL: DWORD;
end;

pPLG_INFO = ^PLG_INFO;
PByteArray = ^TByteArray;
TByteArray = array[0..32767] of Byte;

function DVBPLGInitFilterEx(CardType: DWORD): BOOL;stdcall;
function DVBPLGInitFilter: BOOL;stdcall;
function DVBPLGCloseFilter: BOOL;stdcall;
procedure ShowAbout; stdcall;
procedure GetMyParams(PLG_Info: pPLG_INFO); stdcall;

exports DVBPLGInitFilterEX name "DVBPLGInitFilterEx";
exports DVBPLGInitFilter name "DVBPLGInitFilter";
exports DVBPLGCloseFilter name "DVBPLGCloseFilter";
exports ShowAbout name "DVBPLGShowAbout";
exports GetMyParams name "DVBPLGGetInfo";

implementation

uses unit2;

function DVBPLGCloseFilter: BOOL ;stdcall;
begin
Result:=true;
end;

function DVBPLGInitFilterEX(CardType: DWORD): BOOL;stdcall;
begin
Result:=True;
end;

function DVBPLGInitFilter: BOOL;stdcall;
begin
Result:=True;
end;

procedure ShowAbout; stdcall;
begin
( PLG_Info: pPLG_INFO)
делаю DLL на VCL , работает без проблем , Dll практически пустая , только форма и кнопка , тоже самое на KOL нифига не работает , при попытке открыть форму вылетает
---------------------------
Аccess violation at address 02CBCE8B in module "xxx.dll". Read of address 00000018.
---------------------------
может есть какие хитрости ?


program xxx;
uses
KOL,
Windows, Messages, SysUtils, Variants, Classes,


Unit2 in "Unit2.pas" {Form2},
Unit1 in "Unit1.pas";
//{$R *.res}

begin // PROGRAM START HERE -- Please do not remove this comment

{$IFDEF KOL_MCK} {$I xxx_0.inc} {$ELSE}

Application.initialize;
Application.CreateForm(TForm2, Form2);
Application.run;

{$ENDIF}

end.


unit Unit1;

interface

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

type

PLG_INFO = packed record
hdrVer: DWORD;
dwType: DWORD;
dwTTL: DWORD;
end;

pPLG_INFO = ^PLG_INFO;
PByteArray = ^TByteArray;
TByteArray = array[0..32767] of Byte;

function DVBPLGInitFilterEx(CardType: DWORD): BOOL;stdcall;
function DVBPLGInitFilter: BOOL;stdcall;
function DVBPLGCloseFilter: BOOL;stdcall;
procedure ShowAbout; stdcall;
procedure GetMyParams(PLG_Info: pPLG_INFO); stdcall;

exports DVBPLGInitFilterEX name "DVBPLGInitFilterEx";
exports DVBPLGInitFilter name "DVBPLGInitFilter";
exports DVBPLGCloseFilter name "DVBPLGCloseFilter";
exports ShowAbout name "DVBPLGShowAbout";
exports GetMyParams name "DVBPLGGetInfo";

implementation

uses unit2;

function DVBPLGCloseFilter: BOOL ;stdcall;
begin
Result:=true;
end;

function DVBPLGInitFilterEX(CardType: DWORD): BOOL;stdcall;
begin
Result:=True;
end;

function DVBPLGInitFilter: BOOL;stdcall;
begin
Result:=True;
end;

procedure ShowAbout; stdcall;
begin
Form2.Form.Show
end;

procedure GetMyParams(PLG_Info: pPLG_INFO); stdcall;
begin
.......
end;

end.


 
vgb   (2003-04-16 11:17) [1]

Возможно из-за использования в проекте на KOL формы VCL?
Попробуй переписать unit1, unit2 на KOL.


 
titnn   (2003-04-16 22:40) [2]

вот переделал , не помогло ...

{ KOL MCK } // Do not remove this line!
library qwe;
uses
KOL,
Windows, SysUtils,


Unit2 in "Unit2.pas" {Form2},
Unit1 in "Unit1.pas";

exports DVBPLGInitFilterEX name "DVBPLGInitFilterEx";
exports DVBPLGInitFilter name "DVBPLGInitFilter";
exports DVBPLGCloseFilter name "DVBPLGCloseFilter";
exports ShowAbout name "DVBPLGShowAbout";
exports GetMyParams name "DVBPLGGetInfo";

{$R *.res}

begin // PROGRAM START HERE -- Please do not remove this comment

{$IFDEF KOL_MCK} {$I qwe_0.inc} {$ELSE}

Application.initialize;
Application.CreateForm(TForm2, Form2);
Application.run;

{$ENDIF}

end.


unit Unit1;

interface

{$IFDEF KOL_MCK}
uses Windows, Messages, ShellAPI, KOL {$IFNDEF KOL_MCK}, mirror, Classes,
Controls, mckCtrls {$ENDIF};
{$ELSE}
{$I uses.inc}
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, mirror;
{$ENDIF}

type

PLG_INFO = packed record
hdrVer: DWORD; //Version of structure
dwType: DWORD; //Type of Filter (currently unsupported)
dwTTL: DWORD; //Time To Live for filter. for ex. PLG_TTL_CHANNEL - Filter need reinitialize after channel change
Name: packed array[0..99] of char;
end;

pPLG_INFO = ^PLG_INFO;
PByteArray = ^TByteArray;
TByteArray = array[0..32767] of Byte;

function DVBPLGInitFilterEx(CardType: DWORD): BOOL;stdcall;
function DVBPLGInitFilter: BOOL;stdcall;
function DVBPLGCloseFilter: BOOL;stdcall;
procedure ShowAbout; stdcall;
procedure GetMyParams(PLG_Info: pPLG_INFO); stdcall;

implementation

uses unit2;

function DVBPLGCloseFilter: BOOL ;stdcall;
begin
Result:=true;
end;

function DVBPLGInitFilterEX(CardType: DWORD): BOOL;stdcall;
begin
Result:=True;
end;

function DVBPLGInitFilter: BOOL;stdcall;
begin
Result:=True;
end;

procedure ShowAbout; stdcall;
begin
Form2.Form.Show;//SetWindowPos(Form1.Handle, HWND_TOPMOST, 0, 0, 0, 0 , SWP_NOMOVE or SWP_NOSIZE or SWP_SHOWWINDOW);
end;

procedure GetMyParams(PLG_Info: pPLG_INFO); stdcall;
begin
PLG_Info.hdrVer:=100;
PLG_Info.dwType:=0;
PLG_Info.dwTTL:= 1;
PLG_Info.Name:="Record_To_PVA";
end;

end.


{ KOL MCK } // Do not remove this line!
{$DEFINE KOL_MCK}
unit Unit2;

interface

{$IFDEF KOL_MCK}
uses Windows, Messages, ShellAPI, KOL {$IFNDEF KOL_MCK}, mirror, Classes,
Controls, mckCtrls {$ENDIF};
{$ELSE}
{$I uses.inc}
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, mirror;
{$ENDIF}

type
{$IFDEF KOL_MCK}
{$I MCKfakeClasses.inc}
PForm2 = ^TForm2;
TForm2 = object(TObj)
Form: PControl;
{$ELSE not_KOL_MCK}
TForm2 = class(TForm)
{$ENDIF KOL_MCK}
KOLProject1: TKOLProject;
KOLForm1: TKOLForm;
Button1: TKOLButton;
KOLApplet1: TKOLApplet;
procedure Button1Click(Sender: PObj);
procedure KOLForm1FormCreate(Sender: PObj);
private
{ Private declarations }
public
( var Result: PForm2; AParent: PControl ) [2]
вот переделал , не помогло ...

{ KOL MCK } // Do not remove this line!
library qwe;
uses
KOL,
Windows, SysUtils,


Unit2 in "Unit2.pas" {Form2},
Unit1 in "Unit1.pas";

exports DVBPLGInitFilterEX name "DVBPLGInitFilterEx";
exports DVBPLGInitFilter name "DVBPLGInitFilter";
exports DVBPLGCloseFilter name "DVBPLGCloseFilter";
exports ShowAbout name "DVBPLGShowAbout";
exports GetMyParams name "DVBPLGGetInfo";

{$R *.res}

begin // PROGRAM START HERE -- Please do not remove this comment

{$IFDEF KOL_MCK} {$I qwe_0.inc} {$ELSE}

Application.initialize;
Application.CreateForm(TForm2, Form2);
Application.run;

{$ENDIF}

end.


unit Unit1;

interface

{$IFDEF KOL_MCK}
uses Windows, Messages, ShellAPI, KOL {$IFNDEF KOL_MCK}, mirror, Classes,
Controls, mckCtrls {$ENDIF};
{$ELSE}
{$I uses.inc}
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, mirror;
{$ENDIF}

type

PLG_INFO = packed record
hdrVer: DWORD; //Version of structure
dwType: DWORD; //Type of Filter (currently unsupported)
dwTTL: DWORD; //Time To Live for filter. for ex. PLG_TTL_CHANNEL - Filter need reinitialize after channel change
Name: packed array[0..99] of char;
end;

pPLG_INFO = ^PLG_INFO;
PByteArray = ^TByteArray;
TByteArray = array[0..32767] of Byte;

function DVBPLGInitFilterEx(CardType: DWORD): BOOL;stdcall;
function DVBPLGInitFilter: BOOL;stdcall;
function DVBPLGCloseFilter: BOOL;stdcall;
procedure ShowAbout; stdcall;
procedure GetMyParams(PLG_Info: pPLG_INFO); stdcall;

implementation

uses unit2;

function DVBPLGCloseFilter: BOOL ;stdcall;
begin
Result:=true;
end;

function DVBPLGInitFilterEX(CardType: DWORD): BOOL;stdcall;
begin
Result:=True;
end;

function DVBPLGInitFilter: BOOL;stdcall;
begin
Result:=True;
end;

procedure ShowAbout; stdcall;
begin
Form2.Form.Show;//SetWindowPos(Form1.Handle, HWND_TOPMOST, 0, 0, 0, 0 , SWP_NOMOVE or SWP_NOSIZE or SWP_SHOWWINDOW);
end;

procedure GetMyParams(PLG_Info: pPLG_INFO); stdcall;
begin
PLG_Info.hdrVer:=100;
PLG_Info.dwType:=0;
PLG_Info.dwTTL:= 1;
PLG_Info.Name:="Record_To_PVA";
end;

end.


{ KOL MCK } // Do not remove this line!
{$DEFINE KOL_MCK}
unit Unit2;

interface

{$IFDEF KOL_MCK}
uses Windows, Messages, ShellAPI, KOL {$IFNDEF KOL_MCK}, mirror, Classes,
Controls, mckCtrls {$ENDIF};
{$ELSE}
{$I uses.inc}
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, mirror;
{$ENDIF}

type
{$IFDEF KOL_MCK}
{$I MCKfakeClasses.inc}
PForm2 = ^TForm2;
TForm2 = object(TObj)
Form: PControl;
{$ELSE not_KOL_MCK}
TForm2 = class(TForm)
{$ENDIF KOL_MCK}
KOLProject1: TKOLProject;
KOLForm1: TKOLForm;
Button1: TKOLButton;
KOLApplet1: TKOLApplet;
procedure Button1Click(Sender: PObj);
procedure KOLForm1FormCreate(Sender: PObj);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2 {$IFDEF KOL_MCK} : PForm2 {$ELSE} : TForm2 {$ENDIF} ;

{$IFDEF KOL_MCK}
procedure NewForm2( var Result: PForm2; AParent: PControl );
{$ENDIF}

implementation

{$IFNDEF KOL_MCK} {$R *.DFM} {$ENDIF}

{$IFDEF KOL_MCK}
{$I Unit2_1.inc}
{$ENDIF}

procedure TForm2.Button1Click(Sender: PObj);
begin
form.hide;
end;

procedure TForm2.KOLForm1FormCreate(Sender: PObj);
begin
beep(1000,100);
end;

end.


 
Boguslaw   (2003-04-16 22:54) [3]

Hmm...If You calling ShowAbout from VCL project , I"m pretty sure that form from DLL should have own Applet created (and rather ShowModal then Show) If from KOL You could pass pointer to application Applet object.
If You want Show instead of ShowModal then ask Vladimir how to create KOL form to be self-free (like Action = caFree in VCL form)

Boguslaw



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

Форум: "KOL";
Текущий архив: 2004.01.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.011 c
4-12214
_san_
2003-10-14 10:28
2004.01.05
Как скопировать поврежденный файл


1-11920
k_len
2003-12-22 09:31
2004.01.05
непечатные символы


1-11933
-=DeMoH=-
2003-12-19 23:18
2004.01.05
Delphi VS MathCAD


1-11850
jCode
2003-12-18 18:43
2004.01.05
Онклик к кнопке


1-11856
Maxim Vetera
2003-12-18 15:23
2004.01.05
Профилирование в





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