Chyba: Třída GlobalMultiUse nelze ukončit v prostředí více podprocesy

Překlady článku Překlady článku
ID článku: 300850 - Produkty, které se vztahují k tomuto článku.
Tento článek byl archivován. Je nabízen v takovém stavu, v jakém je, a nebude již nadále aktualizován.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Příznaky

Při volání procedury dvou klientů z ActiveX EXE součást na stejný čas a tento postup v paměti; který je volá jiný postup MultiUse třídy v dynamická knihovna (DLL), pokud tato třída přistupuje k postupu v GlobalMultiUse třídy v jiné ActiveX DLL, EXE ActiveX zůstane součást ActiveX, nezdaří ukončit, dokonce po všech vydána odkazy.

Toto chování nedojde, Visual Basic 6.0 Service Pack 3 (SP3) nebo starší.

Příčina

K tomuto problému dochází, protože funkce DllCanUnloadNow DLL GlobalMultiUse vrátí NEPRAVDA, pokud je aktuálně volána jiným podprocesem. To znamená, že DLL GlobalMultiUse nemusí být možné uvolnit sám v prostředí s více podprocesy.

Řešení

Společnost Microsoft má nyní k dispozici podporovanou opravu hotfix, která je však určena pouze k opravě problému popsaného v tomto článku. Tuto opravu použijte pouze u systémů, ve kterých dochází k popsanému problému.

Poznámka: Musíte mít Visual Studio licenční smlouvy tuto opravu hotfix získat.

Potřebujete-li odstranit tento problém, obraťte se na služby odborné pomoci společnosti Microsoft, kde můžete tuto opravu hotfix získat. Úplný seznam telefonních čísel služeb technické podpory společnosti Microsoft a informace o cenách technické podpory naleznete na tomto webu společnosti Microsoft:
http://support.microsoft.com/contactus/?ws=support
Poznámka: Poplatky, které je třeba obvykle zaplatit za telefonní hovory, mohou být stornovány, jestliže pracovník technické podpory společnosti Microsoft zjistí, že oznámený problém lze vyřešit konkrétní aktualizací. Další dotazy a žádosti o odbornou pomoc, které se netýkají této zvláštní opravy, podléhají běžným sazbám za poskytnutí odborné pomoci. Anglická verze této opravy má následující nebo vyšší atributy souborů:
   Date         Time        Version    Size     File name   
   ---------------------------------------------------------
   29 May 2001  3:32:23 PM  6.0.92.37  1.32 MB  Msvbvm60.dll
				

Prohlášení

Společnost Microsoft potvrzuje, že se jedná o chybu v Microsoft produktů uvedených na začátku tohoto článku.

Další informace

Kroky pro reprodukci tohoto chování

Vytvořit DLL s třídy GlobalMultiUse

  1. Vytvořit nový projekt ActiveX DLL s výchozí třídy Class1.
  2. V nabídce projekt klepněte na příkaz Project1 vlastnosti. Změnit název projektu GMultiUseDll a potom klepněte na tlačítko OK.
  3. V dialogovém okně nastavit vlastnost Instancing Class1 6 - GlobalMultiUse.
  4. Zkopírujte a vložte následující kód modulu kódu Class1 's:
    Public Function ClassName() As String
        ClassName = "Class1"
    End Function
    					
  5. V nabídce soubor klepněte na Vytvořit GMultiUseDll.dll kompilovat projektu. Je vytvořen GMultiUseDll.dll.

Vytvořit DLL s MultiUse třídy

  1. Vytvořit nový projekt ActiveX DLL s výchozí třídy Class1.
  2. V nabídce projekt klepněte na příkaz Project1 vlastnosti. Změnit název projektu MultiUseDll a potom klepněte na tlačítko OK.
  3. Z nabídky projektu klepněte na příkaz odkazy, zaškrtněte políčko GMultiUseDll.dll a klepněte na tlačítko OK.
  4. Zkopírujte a vložte následující kód modulu kódu Class1 's:
    Public Function GetString() As String
        GetString = ClassName
    End Function
    					
  5. V nabídce soubor klepněte na Vytvořit MultiUseDll.dll kompilovat projektu. Je vytvořen MultiUseDll.dll.

Vytvoření projektu ActiveX EXE

  1. Vytvořit nový projekt ActiveX EXE s výchozí třídy Class1.
  2. V nabídce projekt klepněte na příkaz Project1 vlastnosti. Změnit název projektu TestServer a potom klepněte na tlačítko OK.
  3. Z nabídky projektu klepněte na příkaz odkazy, zaškrtněte políčko MultiUseDll.dll a klepněte na tlačítko OK.
  4. V nabídce projekt klepněte na tlačítko Vlastnosti TestServer. Na kartě Obecné nastavte na 10 podprocesů fondu podprocesů.
  5. Zkopírujte a vložte následující kód modulu kódu Class1 's
    Public Sub DoSomething()
        Dim obj As MultiuseDll.Class1
        Set obj = New MultiuseDll.Class1
        obj.GetString
    End Sub
    					
  6. V nabídce soubor klepněte na Vytvořit TextServer.exe kompilovat projektu. Je vytvořen TextServer.exe.

Vytvoření projektu klienta

  1. Vytvořit nový projekt standardní EXE s výchozí formulář Form1.
  2. V nabídce projekt klepněte na příkaz Project1 vlastnosti. Změnit název projektu TestClient a potom klepněte na tlačítko OK.
  3. Přidat popisek (Label1), TextBox (Text1) a dvě CommandButtons (Command1 a Command2) Form1.
  4. Zkopírujte a vložte následující kód modulu kódu Form1 's:
    Dim bStop As Boolean
    
    Private Sub Command1_Click()
        Dim oServer As Object
        Set oServer = CreateObject("TestServer.Class1")
        WaitTRUEinFile Text1.Text
        oServer.DoSomething
        Set oServer = Nothing
        Label1.Caption = "The reference was released"
    End Sub
    
    ' The purpose of this function is to synchronize the call to the
    ' GlobalMultiUse DLL through the file Sync.txt.
    Private Sub WaitTRUEinFile(sFile As String)
        Dim sFlag      As String
        Label1.Caption = "Waiting for 'TRUE' in " & sFile
        Do While bStop = False
            Open sFile For Input As #1
            Line Input #1, sFlag
            Close #1
            
            If UCase(Trim(sFlag)) = "TRUE" Then
                Exit Do
            End If
            DoEvents
        Loop
    End Sub
    
    Private Sub Command2_Click()
        bStop = True
    End Sub
    
    Private Sub Form_Load()
        Text1.Text = "c:\sync.txt"
        Command1.Caption = "Start"
        Command2.Caption = "Stop"
        bStop = False
    End Sub
    
    Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
        bStop = True
    End Sub
    					
  5. V nabídce soubor klepněte na Vytvořit TestClient.exe kompilovat projektu. Je vytvořen TestClient.exe.

Spustit test

  1. Otevřete Poznámkový blok. Přidat písmeno „ t „ první pozici a uložte soubor jako Sync.txt v kořenovém adresáři jednotky c:
  2. Spustit dvě instance TestClient.exe. Všimněte si, že jsou spuštěny dva TestClient.exe procesy ve Správci úloh.
  3. Obě instance TestClient klepněte na tlačítko Start.
  4. Otevřete Sync.txt. Změnit na hodnotu „ true „ první řádek a uložit.

    Všimněte si TestServer.exe proces ve Správci úloh po uložení souboru.
  5. Klepněte na tlačítko Zastavit pro obě instance TestClient a zavření formuláře. Všimněte si, že neexistují žádné instance spuštění TestClient.exe. V tomto okamžiku TestServer.exe zůstane načtený.
Další informace o problémech souvisejících s využitím podprocesů v jazyka, klepněte na níže uvedené číslo článku databáze Microsoft Knowledge Base:
241896PRB: Problémy s ActiveX Components Visual Basic 6.0 threading

Vlastnosti

ID článku: 300850 - Poslední aktualizace: 28. února 2014 - Revize: 4.2
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Visual Studio 6.0 Service Pack 4
  • Microsoft Visual Studio 6.0 Service Pack 5
  • Microsoft Visual Basic 6.0 Enterprise Edition Service Pack 4
  • Microsoft Visual Basic 6.0 Enterprise Edition Service Pack 5
  • Microsoft Visual Basic 6.0 Professional Edition
Klíčová slova: 
kbnosurvey kbarchive kbmt kbbug kblocalsvr kbpending kbqfe KB300850 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:300850

Dejte nám zpětnou vazbu

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com