2017-01-31 1 views
0

Je cherche un moyen de résoudre mon problème:Comment obtenir un identifiant unique lors de l'exécution du code

J'ai une application web C# MVC qui utilise une DLL VB6.

Dans cette DLL, il existe une classe commune à tous les utilisateurs et j'aimerais modifier cette architecture.

Est-il possible dans la fonction Class_Initialize d'obtenir un identifiant unique pour définir un tableau avec cet ID et l'instance?

Mon but est de ne pas ajouter cet identifiant dans tous les appels de fonction.

Cela me permet d'obtenir l'instance correcte n'importe où dans le code.

Je peux utiliser la fonction Windows API ou autres ...

Par exemple, DLL A a ClassA et créer ClassB qui est en DLL B. Le ClassA peut être créé par une application exe ou C# application web et ajouter un ID dans ClassA par la fonction setter. Dans le constructeur ClassB, j'aimerais obtenir l'ID ClassA. Cela pourrait être possible si ClassB a un setter et que ClassA crée ClasseB, passez l'identifiant par le setter. Mais le problème est que ClassB pourrait être créé par ClassZ, elle-même créée par ClassY, elle-même ... créé par ClassA

Mon programme a 95 projets et 1000 classes. La solution pourrait être de passer id par setter dans toutes les classes mais c'est très difficile de le faire donc je cherche une solution "undergroud" en travaillant avec la mémoire par exemple ...

Si en ClassB je pouvais récupérer ClassA et l'identifier serait fantastique pour moi

Merci pour votre aide

+1

S'il vous plaît fournir le code –

+0

vous aurez pas d'autre solution que de passer un guid ou un autre type d'identifiant de l'instance de parent à l'instance de l'enfant, dans le constructeur ou dans un poseur, comme vous le triste – deblocker

Répondre

1

Vous pouvez créer un guid unique avec le code VB6 suivant. Vous pourriez alors être en mesure d'utiliser ceci dans votre classe pour suivre l'instance dont vous avez besoin. Cependant, je ne suis pas entièrement sûr de cela, étant donné la quantité d'informations fournie avec aucun code dans le message original.

Public Type GUID 
    Data1 As Long 
    Data2 As Integer 
    Data3 As Integer 
    Data4(7) As Byte 
End Type 
Public Declare Function CoCreateGuid Lib "OLE32.DLL" (pGuid As GUID) As Long 

Public Function GetGUID() As String 
    Dim udtGUID As GUID 
    Dim sGetGUID As String 

    On Error Resume Next 
    If (CoCreateGuid(udtGUID) = 0) Then 
    sGetGUID = String(8 - Len(Hex$(udtGUID.Data1)), "0") & Hex$(udtGUID.Data1) & "-" & _ 
       String(4 - Len(Hex$(udtGUID.Data2)), "0") & Hex$(udtGUID.Data2) & "-" & _ 
       String(4 - Len(Hex$(udtGUID.Data3)), "0") & Hex$(udtGUID.Data3) & "-" & _ 
       IIf((udtGUID.Data4(0) < &H10), "0", "") & Hex$(udtGUID.Data4(0)) & _ 
       IIf((udtGUID.Data4(1) < &H10), "0", "") & Hex$(udtGUID.Data4(1)) & "-" & _ 
       IIf((udtGUID.Data4(2) < &H10), "0", "") & Hex$(udtGUID.Data4(2)) & _ 
       IIf((udtGUID.Data4(3) < &H10), "0", "") & Hex$(udtGUID.Data4(3)) & _ 
       IIf((udtGUID.Data4(4) < &H10), "0", "") & Hex$(udtGUID.Data4(4)) & _ 
       IIf((udtGUID.Data4(5) < &H10), "0", "") & Hex$(udtGUID.Data4(5)) & _ 
       IIf((udtGUID.Data4(6) < &H10), "0", "") & Hex$(udtGUID.Data4(6)) & _ 
       IIf((udtGUID.Data4(7) < &H10), "0", "") & Hex$(udtGUID.Data4(7)) 
    GetGUID = LCase$(sGetGUID) 
    End If 

End Function 
+0

Merci pour votre code, mais cette fonction renvoie un identifiant toujours différent – user1069516

+0

Exactement. Il renvoie un identifiant unique à chaque appel. De votre message, il semblait que vous cherchiez un identifiant unique que vous pourriez attribuer à des instances de vos classes? Quand une classe est créée, demandez-lui de créer un identifiant unique, ou passez un identifiant unique, alors vous devez l'utiliser pour garder une trace de vos instances de classe. Vous aurez besoin de fournir plus d'informations (et de code!) Que les descriptions génériques actuelles dans votre message si vous voulez de l'aide dans le suivi des classes. – MarkL