2012-01-19 50 views
7

Çok sayıda değişkenin açıkça tanımlanmış bir türünün bulunmadığı büyük bir VB6 projem var, bu nedenle otomatik olarak Variant türüne göre varsayılan değerlerdir. Tüm bunları el ile bulmak muazzam bir görev, yani bunu otomatikleştirmek için herhangi bir yol var mı? VB.Net'te 'Option Strict' seçeneğini kullanarak tüm otomatik değişken kullanımını devre dışı bırakmak mümkündür, ancak VB6 bu seçeneğe sahip değildir.VB6: Devre dışı bırakma varyantları

Şu anda her sınıf için DefByte A-Z ekledim, bu da 'Variant' yerine varsayılan tür olan 'Byte' türünü yapar. Bu, 255'ten daha büyük bir değer atandığı anda, çalışma zamanında çok fazla tanımlanmamış değişkeni yakalamamı sağladı. Ama yine de tam olarak delil değildir.

Tüm tanımlanmamış değişkenleri algılamanın daha güvenilir bir yolu var mı?

+0

Tüm çözümde "Variant" kelimesini aratmıyor musunuz? – pikzen

+1

@pikzen: VB6'da türünü belirtmezseniz, Variant alırsınız. – MartW

+1

Ayrıca, "Dim x, y, z AS Tamsayı" gibi bir satır varsa, yalnızca z bir Tamsayı olacaktır. x ve y Varyant olacaktır. Bu davranış VB ile değişti.NET, neyse ki. – MartW

cevap

2

Tüm tanımlanmamış değişkenleri algılamanın "kusursuz" bir yolu olduğunu sanmıyorum. Ancak, Option Explicit bildirimi, tüm değişkenlerin ifadenin göründüğü modülde bildirilmesini gerektirir; bu nedenle derleyici, durumun olmadığı durumları işaretler. Bu ifadeyi yeni bir modülün başına otomatik olarak ekleyen bir IDE seçeneği de vardır.

+0

Zaten kod zaten Option Explicit kullanıldı, teşekkürler! – Muis

+0

Kodunuzda Option Explicit'i kullandıysanız, neden bu soruyu soruyorsunuz? –

+0

@MarkBertenshaw - 'Option Explicit' kayıt dışı değişkenleri kontrol eder. Bildirilen değişkenler için OP'nin –

5

Böyle şeyler almak için Aivosto's Project Analyzer'u kullanırdım. Size neler yapabileceğini iyi bir fikir verecek bir demo sürümü var.

+0

Anlaşmasını gerektirdiği değişken olup olmadığını kontrol etmez. Yazılım pahalı değil ve zamanla çok hızlı bir şekilde ödeyecek ve problemler önlenecek. –

4

Modüllerinizi Option Explicit ile dekore edin.

Bu ifade, oluşturduğunuz her modülün en üstünde olmalıdır. Tamamlandığında, bildirilmemiş değişkenler ile karşılaşıldığında bir derleyici hatasına neden olur.

Option Explicit, ancak, bir varyant olarak ilan edilecek örneğin

Dim i 

değişken i tip-az değişken bildirimleri, engellemez ve bir derleyici hata bile tanımlanır Option Explicit ile atılmış olacaktır.

+0

Zaten kod zaten Option Explicit kullanıldı, teşekkürler! – Muis

2

Bir programcının metin düzenleyicisini (UltraEdit kullanıyorum) kullanın ve proje kaynak dizinlerinde topluca arama yapın.

Muhtemelen zaten yapmış olmanıza rağmen Variant (açıkçası) ile arama yapmaya başlayın.

Sonraki çizgisinde bir şey için düzenli bir ifade türü aramayı kullanın:

*Dim [a-zA-Z][a-zA-Z0-9_]*\p 

As DataType sondaki olmadan Dim x senaryoyu almak gerektiğini.

Dim a, b, c As Integer senaryo türlerini bulmak için *Dim [a-zA-Z][a-zA-Z0-9_]*,.* kullanın. Private ve Global yerine Dim ve bununla yukarıdaki seaches hemen hemen her şeyi almalısınız Dim a As Integer, b, c As Long

Tekrarla gibi garip top senaryoları için

kullanın *Dim .*, [a-zA-Z][a-zA-Z0-9_]*,.*.

+1

'ReDim' de dahil edilmelidir, çünkü VB önce bir 'Dim' gerektirmez. Ve diziler, işlev parametreleri, dönüş değerleri vb. Için işe yaramıyor. Bu yüzden bu güzel bir çaba olsa da, bazı boşluklar var;) – Muis

+0

Sadece dizilerle Redim kullanıyorum. Parametre konusunu düşünmüştüm, ama dürüst olmak gerekirse, her biri için bir tane patlatmak için normal ifadelerle yeterince akıcı değilim. Bunu birinden daha hırslı birine bırakacağım :) – tcarvin

+0

Kamu ve Özel de bir alanı ilan etmek için kullanılamaz mı? Onlar için de normal ifadelere ihtiyacım var. – MarkJ

İlgili konular