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

Вниз

COM   Найти похожие ветки 

 
Marina_Sm   (2004-11-08 12:01) [0]

Почему при вызове COM-объекта, созданного в Delphi:
tab = new ActiveXObject("FirstCom.Number");   //visial Basic
Com создается и тут же разрушается (выводится сообщение в методе destroy), хотя когда его вызываю через приложение delphi все функционирует нормально. Помогите, пожалуйста.


 
digger ©   (2004-11-08 12:41) [1]

В Delphi есть такая функция CoInitialize, которую нужно запускать перед созданием COM объекта. Может быть в VB есть?


 
VMcL ©   (2004-11-08 14:04) [2]

>>Marina_Sm  (08.11.04 12:01)

Как объявлена переменная tab? Где она еще используется?


 
Marina_Sm   (2004-11-08 14:25) [3]

tab = new ActiveXObject("Comics.BGSocket");      
tab.SetValue(2);
У меня на первой строке пишет что объект создался, тут же уничтожается, и при второй строке уже пишется что tab = nil и им пользоваться нельзя (или что-то вроде этого на английском)/ хотя если word вызывать, то все проходит нормально.
Может где нибудь есть толковый пример создания COM - объекта на Delphi? Честно говоря, я уже измучалась с этим Com"ом :_-(


 
Marina_Sm   (2004-11-08 14:35) [4]

Если честно, мне когда этот пример давали, сказали, что visial basic. Но мне кажется , что это Java Script (расширение js). Хотя не знаю :) А текст для вызова Word такой:
tab = new ActiveXObject("Word.Application");       //ActiveX
tab.visible = true;

function initIO() {
Shell = WScript.CreateObject("Wscript.Shell")
fso = new ActiveXObject("Scripting.FileSystemObject");
ForReading = 1, ForWriting = 2; ForAppending = 3;
}
function echo(txt) {
WScript.Echo(txt);
}


 
VMcL ©   (2004-11-08 15:56) [5]

>>Marina_Sm  (08.11.04 14:25) [3]

Код COM-объекта есть?


 
Marina_Sm   (2004-11-09 00:22) [6]

unit NumServ;

interface

uses
 Windows, ActiveX, ComObj, NumIntf;

type
 TNumber = class(TComObject, INumber)
 private
   fValue: Integer;
 public
   function GetValue: Integer; virtual; stdcall;
   procedure SetValue (New: Integer); virtual; stdcall;
   procedure Increase; virtual; stdcall;
   procedure Initialize; override;
   destructor Destroy; override;
 end;

const
 Class_Number: TGUID = "{5B2EF181-3AAE-11D3-B9F1-00000100A27B}";

implementation

uses ComServ;

{ TNumber }

destructor TNumber.Destroy;
begin
 inherited;
 MessageBox (0, "Object Destroyed",
   "TDLLNumber", mb_OK); // API call
end;

function TNumber.GetValue: Integer;
begin
 Result := fValue;
end;

procedure TNumber.Increase;
begin
 Inc (fValue);
end;

procedure TNumber.Initialize;
begin
 inherited;
 fValue := 10;
 MessageBox (0, "Создан!!!",
   "TDLLNumber", mb_OK); // API call
end;

procedure TNumber.SetValue(New: Integer);
begin
 fValue := New;
end;

initialization
 TComObjectFactory.Create(ComServer, TNumber, Class_Number,
   "Number", "Number Server", ciMultiInstance, tmApartment);
end.


 
VMcL ©   (2004-11-09 07:24) [7]

>>Marina_Sm  (09.11.04 00:22) [6]

А INumber?


 
Marina_Sm   (2004-11-09 20:50) [8]

unit NumIntf;

interface

type
 INumber = interface
   ["{B4131140-7C2F-11D0-98D0-444553540000}"]
   function GetValue: Integer; stdcall;
   procedure SetValue (New: Integer); stdcall;
   procedure Increase; stdcall;
 end;

implementation

end.

Может где-нибудь есть пример? :( А то совсем этот Com замучил


 
Vitalik ©   (2004-11-10 11:15) [9]

Предположу, что нужно создавать не COM Object, а Automation Object. Тогда ваш класс, реализующий интерфейс будет наследником не TComObject a TAutoObject. А этот класс (TAutoObject) реализует интерфейс IDispatch, необходимый для вызова методов COM объектов из скриптовых языков. Собственно, на сколько мне известно, объекты автоматизации (Aoutomation Object) для того и нужны, чтобы их можно было использовать в скриптовых языках.


 
Vitalik ©   (2004-11-10 11:25) [10]

На http://www.interface.ru в "поиск по сайту" введите DELPHI и COM.
Вот в 5й части про это и написано.


 
FastByte   (2004-11-16 07:48) [11]

Вот кусок моего кода, который работает
1. ===== Интерфейс и сразу GUID Com класса: =======

unit uPluginInterfaceRS;
 interface
 const
  Class_EconomCalcRollingSources: TGUID =
                   "{77689308-ACF5-40AA-94EB-64F505DFB7A7}";
type
  IEconomCalcRS = interface
  ["{4C304431-FC32-48CC-B1A3-2E58F51866E3}"]
    function Exec:String;
  end;
implementation
end.

2. ====== Реализация =======

unit uComObject;

{$WARN SYMBOL_PLATFORM OFF}

interface

uses
 Windows, ActiveX, Classes, ComObj,uPluginInterfaceRS;

type
 TEconomCalcRollingSources = class(TComObject,IEconomCalcRS)
 protected
   function Exec:String;
 end;

implementation

uses ComServ,uFormEconomCalc;

{ TEconomCalcRollingSources }

function TEconomCalcRollingSources.Exec: String;
var
 pForm:TFormMain;
begin
 pForm:=TFormMain.Create(nil);
 pForm.ShowModal;
 pForm.Free;
end;

initialization
 TComObjectFactory.Create(ComServer, TEconomCalcRollingSources,
 Class_EconomCalcRollingSources,
   "EconomCalcRollingSources", "", ciMultiInstance,tmApartment);
end.


 
Marina_Sm   (2004-11-17 10:54) [12]

Так из Java Script тоже не работает :( Может я конечно что-то не так набила... Если не сложно пришлите, пожалуйста, исходник на почту marsv2004@mail.ru



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

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

Наверх




Память: 0.49 MB
Время: 0.06 c
14-1122371634
*Pavel
2005-07-26 13:53
2005.08.21
SCSI винчестера, нужна помощь


1-1122890294
Dust
2005-08-01 13:58
2005.08.21
народ, оцените код


3-1121057190
Andrey V.
2005-07-11 08:46
2005.08.21
про UNION ...


1-1122617343
Katya21
2005-07-29 10:09
2005.08.21
Как открыть файл


14-1122449894
sagsoft
2005-07-27 11:38
2005.08.21
Ваше представление о Казахстне