begin
{ Make sure this line works correctly }
Unk := CreateRemoteComObject('server1', StringToGUID(MyGUID));
{ If it does, then cast it to a IDispatch }
Disp := Unk as IDispatch;
end;
Если этот кусок кода работает, а проблема остается, то Вам требуется шаг за шагом пройти через код клиента и найти, где он дает трещину. Если не сможете этого обнаружить, Вам придется запустить сервер под отладчиком и установить связь с клиентом, чтобы Вы могли произвести отладку рядом со местом, дающем слабину.
DCOM
В чем разница между сокетами, DCOM и OLE Enterprise при использовании их в качестве транспорта?
Nomadic отвечает:
Sockets (TCP/IP):
• на клиентах и сервере требуется наличие стека TCP/IP;
• не требуется дополнительной настройки клиентов;
DCOM:
• на клиентах и серверах требуется наличие DCOM (входит в состав Windows NT 4.0, для Windows 95 доступен как опция)
• требуется настройка клиентов (DCOM Configuration Utility — DCOMCNFG.EXE);
• встроенная поддержка модели безопасности Windows NT;
• поддержка обратных вызовов (методов);
CORBA
• на клиентах и серверах требуется наличие Common Object Request Broker;
• требуется настройка клиентов;
• поддержка обратных вызовов (методов);
OLE Enterprise:
• на клиентах и серверах требуется наличие OLE Enterprise;
• требуется настройка клиентов;
• поддержка обратных вызовов (методов);
DDE
DDE – передача текста
Delphi 1
Вот я как работаю с Excel:
type
DDEClientConv1.SetLink('Excel','Sheet1');
try
DDEClientConv1.OpenLink;
DDEClientItem1.DDEItem:= 'R1C1';
DDEClientConv1.PokeData(DDEClientItem1.DDEItem, StrPCopy(P, SomeString)));
finally
DDEClientConv1.CloseLink;
end;
Как вы можете здесь видеть, свойство DDEItem определяется сервером. Если ваш сервер является приложением Delphi, то DDEItem – имя DDEServerItem. На вашем месте я бы не стал так долго заниматься отладкой DDE-программ. Воспользуйтесь синхронизацией, позволяющей понять при отладке правильность действий.
Управление Program Manager в Win95 с помощью DDE
Delphi 1
Для управления программными группами в Program Manager с помощью DDE мною был использован следующий модуль. За основу был взят код Steve Texeira (sp) из руководства Dephi Developers Guide.
Работает под Win 3.1 и '95.
unit Pm;
interface
uses SysUtils, Classes, DdeMan;
type
EProgManError = class(Exception);
TProgMan = class(TComponent)
private
FDdeClientConv: TDdeClientConv;
procedure InitDDEConversation;
function ExecMacroString(Macro: String): Boolean;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
Procedure CreateGroup(GroupName: String; ShowGroup:Boolean);
procedure DeleteGroup(GroupName: String);
procedure DeleteItem(ItemName: String);
procedure AddItem(CmdLine, ItemName: String);
end;
implementation
uses Utils;
const
{ DDE-макростроки для Program Manager }
SDDECreateGroup = '[CreateGroup(%s)]';
SDDEShowGroup = '[ShowGroup(%s, 1)]';
SDDEDeleteGroup = '[DeleteGroup(%s)]';
SDDEDeleteItem = '[DeleteItem(%s)]';
SDDEAddItem = '[AddItem(%s, "%s", %s)]';
constructor TProgMan.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
InitDDEConversation;
end;
destructor TProgMan.Destroy;
begin
if Assigned(FDDEClientConv) then FDdeClientConv.CloseLink;
inherited Destroy;
end;
function TProgMan.ExecMacroString(Macro: String): Boolean;
Begin
StringAsPchar(Macro);
Result := FDdeClientConv.ExecuteMacro(@Macro[1], False);
End;