2017-01-31 13 views
0

問題を解決する方法をお探しします:コードの実行中に一意の識別子を取得する方法

VB6 DLLを使用するC#MVC Webアプリケーションがあります。

このDLLには、すべてのユーザーに共通のクラスがあり、このアーキテクチャを変更したいと考えています。

Class_Initialize関数には、このIDとインスタンスを持つ配列を設定するための一意の識別子を取得することはできますか?

私の目標は、すべての関数呼び出しでこのIDを追加しないことです。

これにより、コード内のどこでも正しいインスタンスを取得できます。 DLL B.ザ・にClassAである

私はたとえば...

をWindows API関数等を使用することができ、DLL AはにClassAを持っており、ClassBのを作成するには、exeファイルのアプリケーションまたはC#のWebアプリケーションによって作成することができ、セッター関数でClassAにIDを追加します。 ClassBコンストラクタでClassA IDを取得したいと考えています。 ClassBにセッターがあり、ClassAがClasseBを作成するときに、セッターによってIDを渡すことができます。しかし問題は、ClassBがClassYによって作成され、自分自身がClassYによって作成されたことです... ClassAによって作成されました

私のプログラムは95のプロジェクトと1000のクラスを持っています。解決策は、すべてのクラスでsetterによってidを渡すことですが、それを作成するのは非常に難しいので、たとえば、メモリで作業することで "undergroud"ソリューションを探します。

ClassBでは、あなたの助け

+1

あなたが –

+0

を入力してくださいあなたのコードですが、この関数は常に異なるIDを返す – deblocker

答えて

1

あなたは、次のVB6のコードで一意のGUIDを作成することができるため

おかげで私のために素晴らしいだろう。これでクラス内でこれを使用して、必要なインスタンスを追跡できます。しかし、元の投稿にコードがない疎な量の情報があれば、私はそれについて完全にはわかっていません。

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

悲しいいただきありがとうございますように、コンストラクタ内またはセッターで、子インスタンスに親インスタンスからGUIDまたは識別子のいくつかの他の種類を渡すよりも、あなたは他の解決策を持っていませんコード – user1069516

+0

まさに。すべての呼び出しで一意のIDを返します。投稿から、クラスのインスタンスに割り当てることができる一意のIDを探しているようでしたか?クラスが作成されるときには、一意のIDを作成するか、一意のIDを渡してから、クラスインスタンスを追跡する必要があります。クラスの追跡を支援するには、現在の一般的な説明よりも多くの情報(およびコード!)を投稿する必要があります。 – MarkL

関連する問題