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

Вниз

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 вся ветка

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

Наверх





Память: 0.48 MB
Время: 0.038 c
4-1120221767
Silence
2005-07-01 16:42
2005.08.21
Надо получить позицию символа в мемо при движении мышки...


14-1122892705
Max4
2005-08-01 14:38
2005.08.21
Внутри офисный форум.


11-1105695193
DmiSb
2005-01-14 12:33
2005.08.21
Печать страницы Excel не показывая самого Excel ?


14-1122403270
Е-клмн
2005-07-26 22:41
2005.08.21
Ну, вот с верой вроде бы разобрались…


1-1122627071
MegaVolt
2005-07-29 12:51
2005.08.21
ListView+WinXP+GridLines+стрелочки вниз вверх=бяка :(





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