Главная страница
    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.47 MB
Время: 0.01 c
15-1213690490
Gg
2008-06-17 12:14
2008.08.03
Стоимость работ


6-1191559374
AndreyRu
2007-10-05 08:42
2008.08.03
TICQClient и HTTP proxy


2-1215183867
VitaFrost
2008-07-04 19:04
2008.08.03
Вычисление периода наработки


2-1215065064
Al
2008-07-03 10:04
2008.08.03
ClipCursor не могу разобраться с координатами


15-1213765055
Slider007
2008-06-18 08:57
2008.08.03
С днем рождения ! 18 июня 2008 среда





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