Форум: "Начинающим";
Текущий архив: 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