Форум: "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.47 MB
Время: 0.035 c