COM服务器中客户端程序的建立问题(50分)

  • 主题发起人 主题发起人 cuddle
  • 开始时间 开始时间
C

cuddle

Unregistered / Unconfirmed
GUEST, unregistred user!
[?][?][?]近来刚刚接触Delphi下的COM编程,在实现书中说的建立COM服务器中的客户端程序时遇到了这样的问题;[red]书上说(原话):在SortServ工程文件目录下生成一个名称为Client的子目录,再选择File|New Application菜单建立一个应用程序。将工程保存在Client目录下,工程文件保存为ClientPrj.dpr,Unit1保存为Client.Pas。[/red]
我的问题就在于:我不知道如何在[red]SortServ工程文件目录下生成一个名称为Client的子目录[/red],以及如何[red]一个应用程序下能同时保存ClientPrj.dpr和Client.Pas[/red]

请赐教,小弟刚刚接触Delphi所以环境不是很熟悉!!谢谢

 
在SortServ工程文件所在目录下生成Client子目录
windows的目录操作你不会不懂吧?
一个工程保存时保存他的工程文件和他使用的pas文件不是很正常吗
SaveAll就行了
 
是呀,但是是不是要在View|ProjectManager里面调出SortServ目录呀?我就是不知道怎么找到这个目录呀!
我自己先前做出来的客户端,好像是连接不到COM服务器呀,尽管编译正常!
 
客户端能否链接到com服务器,与客户端程序所在的位置无关
书中的目录设置只是对工程文件的目录进行管理而已
你的Client程序想存在什么目录里完全由你设置
至于你说你的客户端链接不上,那就是另外的问题了
把错误提示和相关代码贴出来,别人才好帮您分析啊
 
哦,和客户端程序的保存位置没有关系?!那就是说我只要在客户端都加入对COM服务器中SortInterface的引用就ok了?
是不是建立了客户端应用程序一切正常就可以实现了?
我的ProjectManager下的目录为:
ProjectGroup1
SortServ.dll
Client
Client.pas
Form1
SortInterface.pas
SortServ_TLB.pas
Unit1.pas
你看看有问题吗??
另外,SortServ.dpr源码为:
[red]library SortServ;

uses
ComServ,
Unit1 in 'Unit1.pas',
SortInterface in 'SortInterface.pas',
SortServ_TLB in 'SortServ_TLB.pas',
Client in 'Client.pas' {Form1};

exports
DllGetClassObject,
DllCanUnloadNow,
DllRegisterServer,
DllUnregisterServer;

{$R *.TLB}

{$R *.RES}

begin
end.[/red]
SortInterface源码为:
[red]unit SortInterface;

interface

type
IMySort = interface
['{B0068395-92B6-4534-99A0-2E7B48E2D05F}']
procedure SetValue(iVal:Integer);
function GetSize:Integer;
function GetVal(iInd:Integer):Integer;
procedure BeginSort;
procedure ClearStack;
end;

const
Class_IMySort:TGUID='{B0068395-92B6-4534-99A0-2E7B48E2D05F}';
implementation

end.[/red]
Unit1源码为:
[red]unit Unit1;

interface

uses
Windows, ActiveX, Classes, ComObj,SortInterface;

type
TMySort = class(TComObject,IMySort)
protected
FItems:array[0..19]of integer;
FPoint:Integer;

Public
constructor Create;
procedure SetValue(iVal:Integer);
function GetSize:Integer;
function GetVal(iInd:Integer):Integer;
procedure BeginSort;
procedure ClearStack;
end;

implementation

uses ComServ;

constructor TMySort.Create;
begin
//建立类时将FPoint设置为0
FPoint:=0;
end;

procedure TMySort.ClearStack;
begin
FPoint:=0;
end;

procedure TMySort.SetValue(iVal:Integer);
begin
//将新数值添加到数组中
if FPoint<20 then begin
FItems[FPoint]:=iVal;
FPoint:=FPoint+1;
end;
end;

function TMySort.GetSize:Integer;
begin
//返回数组中数值的个数
Result:=FPoint;
end;

function TMySort.GetVal(iInd:Integer):Integer;
begin
//返回数组中各个数值
if((iInd>=0)and(iInd<=FPoint))then
Result:=FItems[iInd]
else
Result:=0;
end;

procedure TMySort.BeginSort;
var
i,j,Temp:Integer;
begin
//利用简单的冒泡法对数组进行排序
for i:=0 to FPoint do
for j:=FPoint downto i+1 do begin
if FItems[j]<FItems[j-1] then begin
Temp:=FItems[j];
FItems[j]:=FItems[j-1];
FItems[j-1]:=Temp;
end;
end;
end;

initialization
TComObjectFactory.Create(ComServer,TMySort,class_IMySort,'MySort','',
ciMultiInstance,tmApartment);
end.[/red]
Client.pas源码为:
[red]unit Client;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
SortInterface,ComObj,ComCtrls,StdCtrls;

type
TForm1 = class(TForm)
btnAdd: TButton;
btSort: TButton;
btnClear: TButton;
ListBox1: TListBox;
Label1: TLabel;
procedure btnAddClick(Sender:TObject);
procedure FormCreate(Sender:TObject);
procedure btnClearClick(Sender:TObject);
procedure btSortClick(Sender:TObject);
private
FSort:IMySort;
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.btnAddClick(Sender:TObject);
var
xc:Integer;
begin
Randomize;
xc:=Random(1000);
FSort.SetValue(xc);
ListBox1.Items.Add(IntToStr(Xc));
Label1.Caption:=IntToStr(FSort.GetSize);
end;

procedure TForm1.FormCreate(Sender:TObject);
begin
FSort:=CreateComObject(class_IMySort)as IMySort;
end;

procedure TForm1.btnClearClick(Sender:TObject);
begin
FSort.ClearStack;
ListBox1.Clear;
end;

procedure TForm1.btSortClick(Sender:TObject);
var
i:Integer;
begin
FSort.BeginSort;
ListBox1.Clear;
for i:=0 to FSort.GetSize -1 do
ListBox1.Items.Add(IntToStr(FSort.GetVal(i)));
end;

end.[/red]
麻烦你给看看!!还有,我原来建立的ClientPrj.dpr文件找不到了,呵呵,好像被我修改保存了!!
其源码是:
program ClientPrj;
uses
Forms,
Client in 'Client.pas'{Form1},
SortInterface in '../SortInterface.pas';

{$R *.RES}

begin
Application.Initialize;
Application.CreateForm(TForm1,Form1);
Application.Run;
end.
真的很是麻烦了,小弟我也研究研究,回来再讨教!!!
感谢!!!!



 
先给老大50元!!交个老师!!小弟好好学习,以后麻烦老师了,呵呵!!
 
给楼主一个建议,小不要做什么Com服务,先花几天时间编些小东西,熟悉熟悉环境.
 
谢谢,但是别的环境感觉和COM服务器的差别挺大呀!和VB差不多,不过,接收建议!!谢谢!!
 
啊!!是不是把钱给别人了就不属于“待回答问题”了??呵呵,师傅要记得指点呀!!
回复的都是朋友!再次感谢!!!
 
好像没有什么问题啊
你那里的错误提示是什么
还有,我不是很高手,期望值不要过高喔
 
好的,我再调试调试吧!有问题再找你!e-mail可以吗?
我的jack.football@263.net
 
littleantjyb@sina.com
qq 14181048
 
后退
顶部