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

Вниз

Создание сервера Com в виде dll   Найти похожие ветки 

 
Darvin ©   (2008-07-01 11:52) [0]

Здравствуйте!
Делаю COM-сервер в виде DLL. Сначала создал проект - DLL wizard, затем добавил к нему com объект. Откомпилировал. Пытаюсь его зарегистрировать с помощью regsvr32 - выдеает, что библиотека загружена, а найти точку входа не удалось и зарегистрировать невозможно. Хотя, когда я аналогично делал сервер в виде exe, все работало прекрасно. В чем может быть дело?

Код ServerLIB.dpr:
library ServerLIB;

uses
 SysUtils,
 Classes,
 ComServ,
 ServerLIB_TLB in "ServerLIB_TLB.pas",
 ReleaseTest in "ReleaseTest.pas" {ServerLibTest: CoClass};

{$R *.TLB}

{$R *.res}

begin
end.

Код ServerLIB_TLB.pas:
unit ServerLIB_TLB;

{$TYPEDADDRESS OFF} // Unit must be compiled without type-checked pointers.
{$WARN SYMBOL_PLATFORM OFF}
{$WRITEABLECONST ON}
{$VARPROPSETTER ON}
interface

uses Windows, ActiveX, Classes, Graphics, StdVCL, Variants;
 

const
 // TypeLibrary Major and minor versions
 ServerLIBMajorVersion = 1;
 ServerLIBMinorVersion = 0;

 LIBID_ServerLIB: TGUID = "{BF40D6B0-CAEA-4E57-88A1-33C31C310CDA}";

 IID_IServerLibTest: TGUID = "{4E044CAF-DEDD-442E-B5CA-04143F41C2B6}";
 CLASS_ServerLibTest: TGUID = "{DC4E7CC8-C35E-4740-82B8-ED81106CD8A1}";
type

 IServerLibTest = interface;

 ServerLibTest = IServerLibTest;

 IServerLibTest = interface(IUnknown)
   ["{4E044CAF-DEDD-442E-B5CA-04143F41C2B6}"]
   function Add(A: Integer; B: Integer): HResult; stdcall;
 end;

 CoServerLibTest = class
   class function Create: IServerLibTest;
   class function CreateRemote(const MachineName: string): IServerLibTest;
 end;

implementation

uses ComObj;

class function CoServerLibTest.Create: IServerLibTest;
begin
 Result := CreateComObject(CLASS_ServerLibTest) as IServerLibTest;
end;

class function CoServerLibTest.CreateRemote(const MachineName: string): IServerLibTest;
begin
 Result := CreateRemoteComObject(MachineName, CLASS_ServerLibTest) as IServerLibTest;
end;

end.

Код ReleaseTest.pas:
Здравствуйте!
Делаю COM-сервер в виде DLL. Сначала создал проект - DLL wizard, затем добавил к нему com объект. Откомпилировал. Пытаюсь его зарегистрировать с помощью regsvr32 - выдеает, что библиотека загружена, а найти точку входа не удалось и зарегистрировать невозможно. Хотя, когда я аналогично делал сервер в виде exe, все работало прекрасно. В чем может быть дело?

Код ServerLIB.dpr:
library ServerLIB;

uses
 SysUtils,
 Classes,
 ComServ,
 ServerLIB_TLB in "ServerLIB_TLB.pas",
 ReleaseTest in "ReleaseTest.pas" {ServerLibTest: CoClass};

{$R *.TLB}

{$R *.res}

begin
end.

Код ServerLIB_TLB.pas:
unit ServerLIB_TLB;

{$TYPEDADDRESS OFF} // Unit must be compiled without type-checked pointers.
{$WARN SYMBOL_PLATFORM OFF}
{$WRITEABLECONST ON}
{$VARPROPSETTER ON}
interface

uses Windows, ActiveX, Classes, Graphics, StdVCL, Variants;
 

const
 // TypeLibrary Major and minor versions
 ServerLIBMajorVersion = 1;
 ServerLIBMinorVersion = 0;

 LIBID_ServerLIB: TGUID = "{BF40D6B0-CAEA-4E57-88A1-33C31C310CDA}";

 IID_IServerLibTest: TGUID = "{4E044CAF-DEDD-442E-B5CA-04143F41C2B6}";
 CLASS_ServerLibTest: TGUID = "{DC4E7CC8-C35E-4740-82B8-ED81106CD8A1}";
type

 IServerLibTest = interface;

 ServerLibTest = IServerLibTest;

 IServerLibTest = interface(IUnknown)
   ["{4E044CAF-DEDD-442E-B5CA-04143F41C2B6}"]
   function Add(A: Integer; B: Integer): HResult; stdcall;
 end;

 CoServerLibTest = class
   class function Create: IServerLibTest;
   class function CreateRemote(const MachineName: string): IServerLibTest;
 end;

implementation

uses ComObj;

class function CoServerLibTest.Create: IServerLibTest;
begin
 Result := CreateComObject(CLASS_ServerLibTest) as IServerLibTest;
end;

class function CoServerLibTest.CreateRemote(const MachineName: string): IServerLibTest;
begin
 Result := CreateRemoteComObject(MachineName, CLASS_ServerLibTest) as IServerLibTest;
end;

end.

Код ReleaseTest.pas:
Здравствуйте!
Делаю COM-сервер в виде DLL. Сначала создал проект - DLL wizard, затем добавил к нему com объект. Откомпилировал. Пытаюсь его зарегистрировать с помощью regsvr32 - выдеает, что библиотека загружена, а найти точку входа не удалось и зарегистрировать невозможно. Хотя, когда я аналогично делал сервер в виде exe, все работало прекрасно. В чем может быть дело?

Код ServerLIB.dpr:
library ServerLIB;

uses
 SysUtils,
 Classes,
 ComServ,
 ServerLIB_TLB in "ServerLIB_TLB.pas",
 ReleaseTest in "ReleaseTest.pas" {ServerLibTest: CoClass};

{$R *.TLB}

{$R *.res}

begin
end.


Код ServerLIB_TLB.pas:
unit ServerLIB_TLB;

{$TYPEDADDRESS OFF} // Unit must be compiled without type-checked pointers.
{$WARN SYMBOL_PLATFORM OFF}
{$WRITEABLECONST ON}
{$VARPROPSETTER ON}
interface

uses Windows, ActiveX, Classes, Graphics, StdVCL, Variants;
 

const
 // TypeLibrary Major and minor versions
 ServerLIBMajorVersion = 1;
 ServerLIBMinorVersion = 0;

 LIBID_ServerLIB: TGUID = "{BF40D6B0-CAEA-4E57-88A1-33C31C310CDA}";

 IID_IServerLibTest: TGUID = "{4E044CAF-DEDD-442E-B5CA-04143F41C2B6}";
 CLASS_ServerLibTest: TGUID = "{DC4E7CC8-C35E-4740-82B8-ED81106CD8A1}";
type

 IServerLibTest = interface;

 ServerLibTest = IServerLibTest;

 IServerLibTest = interface(IUnknown)
   ["{4E044CAF-DEDD-442E-B5CA-04143F41C2B6}"]
   function Add(A: Integer; B: Integer): HResult; stdcall;
 end;

 CoServerLibTest = class
   class function Create: IServerLibTest;
   class function CreateRemote(const MachineName: string): IServerLibTest;
 end;

implementation

uses ComObj;

class function CoServerLibTest.Create: IServerLibTest;
begin
 Result := CreateComObject(CLASS_ServerLibTest) as IServerLibTest;
end;

class function CoServerLibTest.CreateRemote(const MachineName: string): IServerLibTest;
begin
 Result := CreateRemoteComObject(MachineName, CLASS_ServerLibTest) as IServerLibTest;
end;

end.

Код ReleaseTest.pas:
unit ReleaseTest;

{$WARN SYMBOL_PLATFORM OFF}

interface

uses
 Windows, ActiveX, Classes, ComObj, ServerLIB_TLB, StdVcl;

type
 TServerLibTest = class(TTypedComObject, IServerLibTest)
 protected
   function Add(A, B: Integer): HResult; stdcall;
   {Declare IServerLibTest methods here}
 end;

implementation

uses ComServ;

function TServerLibTest.Add(A, B: Integer): HResult;
begin
 Result := A+B;
end;

initialization
 TTypedComObjectFactory.Create(ComServer, TServerLibTest, Class_ServerLibTest,
   ciMultiInstance, tmApartment);
end.


 
tesseract ©   (2008-07-01 12:19) [1]

Секция экспорта у библиотеки где ?


 
icWasya ©   (2008-07-01 14:13) [2]

в теле проекта должно быть

exports
 DllGetClassObject,
 DllCanUnloadNow,
 DllRegisterServer,
 DllUnregisterServer;


 
Игорь Шевченко ©   (2008-07-01 14:38) [3]


> Делаю COM-сервер в виде DLL. Сначала создал проект - DLL
> wizard, затем добавил к нему com объект.


Сделал бы через Automation Object и все бы стало хорошо


 
Darvin ©   (2008-07-02 10:16) [4]

Всем спасибо, а особенно >icWasya ©, помогло.



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

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

Наверх




Память: 0.49 MB
Время: 0.019 c
2-1215154260
uno-84
2008-07-04 10:51
2008.08.03
Проблема с переходом по ссылке


2-1214886949
DJ_UZer
2008-07-01 08:35
2008.08.03
Как считать текстовый файл из интерната


15-1213854630
Tim
2008-06-19 09:50
2008.08.03
Работа с mp3 без декодировния


3-1203406200
abhtr
2008-02-19 10:30
2008.08.03
клавиша Tab в DBGrid-e


15-1213771277
Ega23
2008-06-18 10:41
2008.08.03
Организация пула соединений