4/12/2016

Bazen Platform Mimarisine de Dikkat Etmek Lazım

Küçük bir Internet Explorer add-on yazmam gerekiyordu ama kısa bir müddet de olsa sinirimi bozdu doğrusu. Hayır, sinirimi bozan yazmak değil; her zamanki gibi çalışması gereken bir şey çalışmıyordu :)

Geliştirmeyi C# ile yapıyordum. Bu iş için öncelikle bir COM nesnesi oluşturmak ve bunu regasm aracı ile kaydetmek lazım. Browser Helper Object diye aratınca zaten aynı örneği göreceksiniz. Regasm aracı ile dll dosyamızı kaydedince, IE add-on listesinde, yazdığınız add-on da görünecektir. Buraya kadar herşey güzel gidiyor zaten. Sorun şu ki bu add-on neden tetiklenmiyor :) Eğer bu noktaya gelecek olursanız dediğime kulak verin. Esasında aynı sorun bir çok COM senaryosunda da yaşanabilir.

Any CPU olarak derlememe rağmen, IE add-on listesinde benin yazdığım arkadaşın yanında sadece "32 bit" yazıyordu. Bu arada 64 bit bir ortam kullandığımı belirtmemde de fayda var. Diğer add-on'ların yanında da "32 ve 64 bit" gibi bir ifade var hepsinde. Regasm aracını, VS Command Prompt'tan direk çağırınca path altında olduğu için zaten kullanılabiliyor. Fakat "c:\Windows\Microsoft.NET\Framework\v4.0" altındakinin kullanıldığını gördüm ($>where regasm komutu ile siz de görebilirsiniz) "c:\Windows\Microsoft.NET\Framework64\v4.0" altındakini kullandıktan sonra geçersiz bir .NET assembly'si kaydetmeye çalıştığımı iddia etse de; derleme seçeneklerinde Any CPU'dan x64 platformuna çekince problemlerim toptan çözülmüş oldu.

.NET uygulamalarında, genelde, platform mimarisi ile çok işimiz olmaz. Any CPU olarak derledikten sonra her türlü çalışmasını bekleriz; ama 3ncü taraf ortamlar ve kütüphaneler olunca bu büyü bozulabiliyor. Elbette regasm aracı da bu işin tuzu biberi oldu ve olan 1 saatime oldu.

Hiç yorum yok: