Конференция "Corba" » Access Violation при запуске приложения
 
  • game2345678 © (20.11.09 22:34) [0]
    Возникла проблема при создании COM-сервера.
    Поэтапно:
    1.Создаю библиотеку ActiveX Library
    2.Создаю COM-объект.В нем создаю два интерфейса - IMyObject и IMyObject2.В первом интерфесе размещаю два метода,Add и Sub (сложение и вычитание).Во втором - Mult и Div (умножение и деление).
    3.Регистрирую библиотеку.
    4.Создаю клиентское приложение(две Edit,две Button и две Label).
    5.Компилирую и запускаю приложение - после ввода чисел и нажатие на кнопки выдает ошибку  

    Access violation at address 00455EF4 in module 'Project1.exe'. Read of address 00000000.

    Исходный код
    [HR]undefined
    Library
    library PMyComServ;

    uses
     ComServ,
     PMyComServ_TLB in 'PMyComServ_TLB.pas',
     Unit1 in 'Unit1.pas' {MyObject: CoClass};

    exports
     DllGetClassObject,
     DllCanUnloadNow,
     DllRegisterServer,
     DllUnregisterServer;

    {$R *.TLB}

    {$R *.RES}

    begin
    end.
    [HR]undefined
    Unit
    unit Unit1;

    {$WARN SYMBOL_PLATFORM OFF}

    interface

    uses
     Windows, ActiveX, Classes, ComObj, PMyComServ_TLB, StdVcl;

    type
     TMyObject = class(TTypedComObject, IMyObject, IMyObject2)
     protected
       function Add(Number1, Number2: Single): Single; stdcall;
       function Div_(Number1, Number2: Single): Single; stdcall;
       function Mult(Number1, Number2: Single): Single; stdcall;
       function Sub(Number1, Number2: Single): Single; stdcall;
       {Declare IMyObject methods here}
     end;

    implementation

    uses ComServ;

    function TMyObject.Add(Number1, Number2: Single): Single;
    begin
    Result := Number1 + Number2;
    end;

    function TMyObject.Div_(Number1, Number2: Single): Single;
    begin
    Result := Number1 / Number2;
    end;

    function TMyObject.Mult(Number1, Number2: Single): Single;
    begin
    Result := Number1 * Number2;
    end;

    function TMyObject.Sub(Number1, Number2: Single): Single;
    begin
    Result := Number1 - Number2;
    end;

    initialization
     TTypedComObjectFactory.Create(ComServer, TMyObject, Class_MyObject,
       ciMultiInstance, tmApartment);
    end.
    [HR]undefined
    Клиент
    unit Unit1;

    interface

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

    type
     TForm1 = class(TForm)
       Button1: TButton;
       Button2: TButton;
       Edit1: TEdit;
       Edit2: TEdit;
       Label1: TLabel;
       Label2: TLabel;
       procedure Button1Click(Sender: TObject);
       procedure FormCreate(Sender: TObject);
       procedure Button2Click(Sender: TObject);
     private
       { Private declarations }
     public
       { Public declarations }
     end;

    var
     Form1: TForm1;
     Interface1: IMyObject;
     Interface2: IMyObject2;

    implementation

    {$R *.dfm}

    procedure TForm1.FormCreate(Sender: TObject);
    begin
       Interface1:=CoMyObject.Create;
       Interface2.QueryInterface(IMyObject2, Interface2);
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    begin
       Label1.Caption := FloatToStr(Interface1.Add(StrToFloat(Edit1.Text), StrToFloat(Edit2.Text)));
       Label2.Caption := FloatToStr(Interface1.Sub(StrToFloat(Edit1.Text), StrToFloat(Edit2.Text)));
    end;

    procedure TForm1.Button2Click(Sender: TObject);
    begin
       Label1.Caption := FloatToStr(Interface2.Mult(StrToFloat(Edit1.Text), StrToFloat(Edit2.Text)));
       Label2.Caption := FloatToStr(Interface2.Div_(StrToFloat(Edit1.Text) , StrToFloat(Edit2.Text)));

    end;

    end.
    [HR]undefined
    Debugger указывает на строку
    Label1.Caption := FloatToStr(Interface1.Add(StrToFloat(Edit1.Text), StrToFloat(Edit2.Text)));
    [HR]undefined
    Буду благодарен,если подскажете в чем проблема и как ее решить.
  • clickmaker © (23.11.09 13:43) [1]
    а Interface1 точно не равен nil?
 
Конференция "Corba" » Access Violation при запуске приложения
Есть новые Нет новых   [118459   +11][b:0][p:0]