2008-12-15 17 views
11

COM'a bir tlb dosyası aracılığıyla maruz bıraktığım bir .NET derlemesi ve tlb'yi kaydeden bir yükleyicim var. Yükleyicinin düzgün çalıştığını ve COM istemcilerinin kitaplığa erişebildiğini manuel olarak kontrol ettim. Şimdiye kadar çok iyi ...COM'a maruz kalan bir derlemeyi .NET'ten test etmek mümkün mü?

Ancak, yükleyicinin düzgün çalıştığını kontrol eden bazı otomatik sistem testlerini bir araya getirmeye çalışıyorum. Bunun bir parçası olarak, bir VM üzerinde kurulumu otomatikleştirdim ve şimdi doğru şekilde çalıştığını doğrulamak için kurulu COM kütüphanesine bazı aramalar yapmak istiyorum. Başlangıçta VB6'da bazı testler yazmayı düşündüm, ancak .NET derlemesine referans veren C# ile yazılmış büyük bir test grubum var. Bunları .tlb'ye başvurmak için değiştirebileceğimi umuyordum, ancak VS2008:

içinde denediğimde hata alıyorum. referans olarak

VS2008'i, belki de tlb dosyasını düzenleyerek bu referansı eklememe izin vermeyecek şekilde kandırabilirmiyim?

Googling herhangi bir çözümle gelmedi. http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=120882

+0

Birkaç kişi, tlbimp.exe dosyasını kullanarak konuştu. Tlbimp.exe blah.tlb'yi denediğimde hatayı alıyorum: "" Type library blah bir CLR derlemesinden dışa aktarıldı ve CLR derlemesi olarak içe aktarılamıyor. " – Akash

cevap

12

En yakın Ben bir çözüm buldum aşağıdaki gibi bir şey olabilir:

using System; 
class ComClass 
{ 
    public bool CallFunction(arg1, arg2) 
    { 
     Type ComType; 
     object ComObject; 

     ComType = Type.GetTypeFromProgID("Registered.ComClass"); 
     // Create an instance of your COM Registered Object. 
     ComObject = Activator.CreateInstance(ComType); 

     object[] args = new object[2]; 
     args[0] = arg1; 
     args[1] = arg2; 

     // Call the Method and cast return to whatever it should be. 
     return (bool)ComType.InvokeMember("MethodToCall", BindingFlags.InvokeMethod, null, ComObject, args)) 
    } 
} 

Çok güzel değil, ama bu noktada bir noktaya varıyor. Tabii ki, ComObject örneğini bir kurucuya yerleştirebilir ve çağrıların geri kalanını nesneye sarabilirsiniz, ancak muhtemelen test kodu için gerekli değildir.

+0

+ 1 Type.GetTypeFromProgID yöntemi için oluşturuldu, bu COM alabilirsiniz yazın. Bunu denedim, işe yarıyor (ama bir referans eklemenin pratik bir farkı var mı? Bilmiyorum). Örnekte – peenut

+0

'methodCOM' aslında 'ComType' değişkeni olmalıdır. – glebd

-1

+2

COM bileşeni C# veya başka bir .NET dili –

+2

-1 neden olarak oluşturulduysa, aynı şekilde yorum: COM bileşeni C# veya başka bir .NET dili – peenut

0

Sen olmalıdır .NET kodunda kullanılabilir COM bileşeninden bir derleme üretebilir tlbimp.exe kullanma: buldum All "By Design" bu olduğunu belirten bir Microsoft Connect makale TLBImp kullanarak kurulu COM bileşeninize bir sarmalayıcı sınıfı oluşturabilir ve daha sonra testlerinizi buna karşı çalıştırabilirsiniz. Temel olarak bir Net derleme yazıyorsunuz, bunu COM'a yükledikten sonra sınama sınıfına karşı sınama yapacaksınız, bu nedenle sınamalarınız bir COM bileşeni tarafından çağrılmış gibi yönlendirileceksiniz

İlgili konular