Re: Danke euch allen

Tech-Archive recommends: Repair Windows Errors & Optimize Windows Performance

From: Martin Müller (mm_at_inthemitddleofnowhere.com)
Date: 02/18/05


Date: Fri, 18 Feb 2005 16:10:24 +0100

Hallo Peter

"Peter Götz" <gssg_nospam@t-online.de> schrieb im Newsbeitrag
news:#ynn9FcFFHA.2824@tk2msftngp13.phx.gbl...
> Hallo Martin,
>
> > Spass beiseite. Danke für eure Hilfe. Ich werde nun das Connection
Objekt
> > halt als Member der vier Interface separat öffnen.
>
> Als welches Member welcher vier Interfaces?
>
>
> > Scheint in VB einfach
> > nicht anders zu gehen. Bin ein ziemlicher VB-Neuling und komme von C++.
Da
> > wäre das kein Problem, weil es eine DllMain Funktion gibt, in der ich
> > mitkriege, ob die DLL geladen oder entladen wird.
>
> Was hat Dein Problem mit dem Laden einer DLL zu tun?
> Wenn ich es richtig verstanden habe, gibt es in dieser DLL irgendeine
> Funktion, welche eine ADODB.Connection erstellt/öffnet.
>
> Deklariere in Deinem VB-Code eine passende Objektvariable
>
> Option Explicit
>
> Private WithEvents mCNN
>
> und gib dieser Objektvariablen einen Verweis auf Dein Connectionobjekt.
>
> Set mCnn = DeinConnectionobjekt
>
> Ab jetzt kannst Du Deine DLL vergessen. Du kannst sie entladen oder sonst
> was damit tun. Deine Variable mCnn hält einen Verweis auf Dein
> Connectionobjekt und somit kannst Du alles mit dieser Connection machen.
>
> Gruß aus St.Georgen
> Peter Götz
> www.gssg.de (mit VB-Tips u. Beispielprogrammen)
>

Ich versuch nochmal zu beschreiben, was ich habe: Ich habe eine
ActiveX-DLL, die vier verschiedene Interfaces (Klassen in VB) implementiert:
LanguageHandler.DialogTranslator, LanguageHandler.PromptTranslator,
LanguageHandler.DocTextTranslator und LanguageHandler.DbQueryTranslator.

Jedes dieser vier Interfaces benötigt Zugriff auf ein und dieselbe Datenbank
eines SQL-Servers, um verschiedene Queries abzusetzen. Nun hat der
Programmierer, der diese DLL erstellt hat, folgendes gemacht (etwas
abgespeckt):

In einem Modul hat er den folgenden Code:

Public oDbConnection As ADODB.Connection

Public Sub StartDbConnection()
  If oDbConnection is Nothing Then
    Set oDbConnection = New ADODB.Connection
    oDbConnection.Open "Stellvertreter für ConnectionString"
  End If
End Sub

In jedem der Interfaces hat er folgendes Implementiert:

Private Sub Class_Initialize()
  StartDbConnection
End Sub

Public Function Translate(ByVal Key as Integer) As Boolean
  Dim oRecSet as New ADODB.Recordset
  oRecSet.Open "SELECT * FROM table WHERE ID=" & Key, oDbConnection
End Function

Das erste Interface, das von einem Client angefordert wird, erzeugt und
öffnet also das Connection Objekt.

So weit, so gut. Aber ein oDbConnection.Close und Set oDbConnection =
Nothing ist weit und breit nirgends. Und somit habe ich mich dann eben
gefragt, ob das wohl automatisch geschieht, wenn die DLL entladen wird (was
ja automatisch passiert, wenn kein Client mehr ein Interface referenziert
und genügend Idle-Time zur Verfügung steht, soviel hab ich mindestens mal
aus der Online-Hilfe).

Das ist soweit ja nicht viel anders als, was du mir vorschlägst, wenn ich
alles richtig verstanden habe. Mit der Ausnahme des WithEvents Keywords und
dass oConnection Private ist, statt Public. Private müsste ich natürlich
dann mit Hilfe einer Sub oder Function umgehen, damit ich in den Interfaces
zum Connection Object komme. Und was WithEvents angeht, so habe ich da
offensichtlich einen Informations-Nachholbedarf. Aufgrund der Doku komme ich
jedenfalls nicht darauf, warum das vonnöten sein sollte. Kannst du mir da
noch einen Denkanstoss geben?

Trotz alledem bleibt die Frage offen, was geschieht, wenn kein Client mehr
eine Referenz auf eines der Interfaces hat und die DLL dadurch automatisch
entladen wird. Wo muss ich dann das Close auf der privaten Referenz
aufrufen?

Danke & Gruss
Martin



Relevant Pages

  • Re: PPTP Site to Site Test VPN will not come up
    ... I don't know if the IP addresses you gave to the dd interfaces confuses ... It looks like the server is not properly configured to accept ... Have you set the remote access policy to accept remote ... There connection is set to persistent on both sides and ...
    (microsoft.public.windows.server.networking)
  • Re: setup unable to determine the dns name of this computer.
    ... > Ethernet adapter Local Area Connection: ... > The machine has two interfaces on the motherboard. ... this server, disable one interface and see what happens. ... > the network and I have been considering stopping it from being this (I ...
    (microsoft.public.exchange.setup)
  • HACMP 5.4 - cant configure cluster
    ... I have a pretty basic setup - 2 nodes with two network interfaces each. ... I have one Geo-mirrored VG mirrored from tiger to leopard across one of the networks, the other is for user traffic. ... Wed Nov 28 05:32:30 2007: Trying to establish connection to node temporarynode0000002020023310 ...
    (comp.unix.aix)
  • Re: 802.11 Association not noticed by device
    ... I worked on a project that used multiple interfaces and multiple IP ... You say your AP association is "perfectly valid," but is it really? ... you test your AP connection with WEP disabled? ...
    (microsoft.public.windowsce.embedded)
  • RE: svchost.exe Application Error.
    ... Description: Net Win32 API DLL ... P.S the NetBio over TCP/IP is on the Internet Protocol TCP/IP properties, ... you gone to the Network connection and Right click your Wireless/Wired LAN, ...
    (microsoft.public.windowsxp.network_web)