Icon View Thread

The following is the text of the current message along with any replies.
Messages 1 to 9 of 9 total
Thread Windows socket error
Mon, May 7 2007 7:40 AMPermanent Link

"Petter Topp"
Hi.

I'm getting an ESocketError when terminating a Dll with Dbisam database
running C/S.
The error is "Windows socket error" WSAStartup (10093) on API "Closesocket".

If I run the DLL with Local database settings everything runs without
errror.
I don't get any errors running an application without the DLL.

Anyone who knows how to solve this?

Thanks
Petter Topp
Dbisam 4 C/S

Mon, May 7 2007 12:25 PMPermanent Link

Tim Young [Elevate Software]

Elevate Software, Inc.

Avatar

Email timyoung@elevatesoft.com

Petter,

<< I'm getting an ESocketError when terminating a Dll with Dbisam database
running C/S.  The error is "Windows socket error" WSAStartup (10093) on API
"Closesocket".

If I run the DLL with Local database settings everything runs without
errror.  I don't get any errors running an application without the DLL. >>

It sounds like a DLL unload order issue that is causing the WinSock layer to
be unloaded before the DBISAM code is done with it.   Are you using any
WinSock/comms capabilities in your main application also ?

--
Tim Young
Elevate Software
www.elevatesoft.com

Mon, May 7 2007 1:41 PMPermanent Link

"Petter Topp"
Hi Tim,

There are no other WinSock or Comm capabilities, it's a simple DLL wich
returns values from a database.
This DLL has allways been running with LocalDatabase settings, but I have
now been working to get it running with C/S.
During debug, when trying to disconnect the database or close a table,
returns this error.

Petter

"Tim Young [Elevate Software]" <timyoung@elevatesoft.com> skrev i melding
news:4D808C49-036D-4272-86DA-295453AD9E98@news.elevatesoft.com...
> Petter,
>
> << I'm getting an ESocketError when terminating a Dll with Dbisam database
> running C/S.  The error is "Windows socket error" WSAStartup (10093) on
> API "Closesocket".
>
> If I run the DLL with Local database settings everything runs without
> errror.  I don't get any errors running an application without the DLL. >>
>
> It sounds like a DLL unload order issue that is causing the WinSock layer
> to be unloaded before the DBISAM code is done with it.   Are you using any
> WinSock/comms capabilities in your main application also ?
>
> --
> Tim Young
> Elevate Software
> www.elevatesoft.com
>

Mon, May 7 2007 4:25 PMPermanent Link

Eryk Bottomley
Petter

> This DLL has allways been running with LocalDatabase settings, but I have
> now been working to get it running with C/S.
> During debug, when trying to disconnect the database or close a table,
> returns this error.


Does the host EXE access DBISAM in C/S mode as well? Regardless of that,
you could try calling ScktComp.Startup during DLL initialisation - that
might kill off the error.

Eryk
Mon, May 7 2007 4:31 PMPermanent Link

"Petter Topp"
Hello Eryk,

Yes the EXE host is also running in C/S mode.
Is this a problem?
What is this ScktComp?

Thanks
Petter

"Eryk Bottomley" <no@way.com> skrev i melding
news:4FFB1F4A-E91F-4D32-A907-E86D3664CB4E@news.elevatesoft.com...
> Petter
>
>> This DLL has allways been running with LocalDatabase settings, but I have
>> now been working to get it running with C/S.
>> During debug, when trying to disconnect the database or close a table,
>> returns this error.
>
>
> Does the host EXE access DBISAM in C/S mode as well? Regardless of that,
> you could try calling ScktComp.Startup during DLL initialisation - that
> might kill off the error.
>
> Eryk

Mon, May 7 2007 7:18 PMPermanent Link

Eryk Bottomley
Petter,

> Yes the EXE host is also running in C/S mode.
> Is this a problem?

No, it isn't a problem per se - I was just clarifying that WSAStartup is
being called in the application but not in the context of the DLL.

> What is this ScktComp?

It is the VCL unit that the standard socket components (which DBISAM
uses) are defined in. The error you are getting indicates that a winsock
API function is being called without a prior call to WSAStartup in the
current execution context. Adding a call to ScktComp.Startup (which is a
WSAStartup wrapper) during DLL initialisation may well rectify this problem.

Eryk
Tue, May 8 2007 3:35 AMPermanent Link

"Petter Topp"
Hello Eryk,

Would you please elaborate on how to implement this, preferably with some
code.

Thanks
Petter


"Eryk Bottomley" <no@way.com> skrev i melding
news:D1540A87-CAD7-4064-9812-58BE4EBBE44D@news.elevatesoft.com...
> Petter,
>
>> Yes the EXE host is also running in C/S mode.
>> Is this a problem?
>
> No, it isn't a problem per se - I was just clarifying that WSAStartup is
> being called in the application but not in the context of the DLL.
>
>> What is this ScktComp?
>
> It is the VCL unit that the standard socket components (which DBISAM uses)
> are defined in. The error you are getting indicates that a winsock API
> function is being called without a prior call to WSAStartup in the current
> execution context. Adding a call to ScktComp.Startup (which is a
> WSAStartup wrapper) during DLL initialisation may well rectify this
> problem.
>
> Eryk

Tue, May 8 2007 5:46 AMPermanent Link

Eryk Bottomley
Petter,

> Would you please elaborate on how to implement this, preferably with some
> code.

library MyDLL;

uses ScktComp;

begin
  Startup;
end.

....see "initialization (libraries)" in the Delphi help[1] if you are
unfamiliar with DLL initialisation code etc.

Eryk


[1] I'm referring to Delphi 7 help files here.
Tue, May 8 2007 7:26 PMPermanent Link

Tim Young [Elevate Software]

Elevate Software, Inc.

Avatar

Email timyoung@elevatesoft.com

Peter,

<< There are no other WinSock or Comm capabilities, it's a simple DLL wich
returns values from a database. This DLL has allways been running with
LocalDatabase settings, but I have now been working to get it running with
C/S.
During debug, when trying to disconnect the database or close a table,
returns this error. >>

What I meant by my question was what Eryk asked - is the main application
also using remote access of some sort over the Winsock layer.  I see by your
response to Eryk that you're using remote access in the main application
also, which is probably the cause for the error.  More than likely, the main
application is unloading the Winsock layer before the DLL is finished with
it.

Are you loading/unloading the DLL dynamically in your application ?

--
Tim Young
Elevate Software
www.elevatesoft.com

Image