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

Вниз

Создание сервера 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.006 c
15-1213716332
Dmitry S
2008-06-17 19:25
2008.08.03
Перестановки


2-1215360644
observateur
2008-07-06 20:10
2008.08.03
widestring


3-1203609071
jziiiiiii
2008-02-21 18:51
2008.08.03
Объясните


6-1191432382
MultIfleX
2007-10-03 21:26
2008.08.03
Разрешение доступа


2-1215151616
Галинка
2008-07-04 10:06
2008.08.03
Преобразование типов





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