2010-12-27 30 views
6

Sadece dll ve hiçbir regsvr32 olmayan bir COM nesnesi örneği oluşturmak mümkün mü?Kayıttan COM nesnesi regsvr32 olmadan

Buradaki ana amacım, bir directshow filtresinin bir örneğini oluşturmak ve grafiğime eklemek - ancak filtreyi kaydetmek için bize regsvr32 istemiyorum. Filtre, başvurumla dağıtılacak bir dll/axde olacak ve yolumda bulunacak. Ben de CLSID'i tanıyacağım.

Temel olarak tek ihtiyacım olan şey, yalnızca dll/axe ve CLSID'e sahipken türün bir örneğini oluşturmanın bir yoludur. Bu C# içinde mümkün mü?

cevap

7

registration-free COM kullanmak istediğiniz gibi görünüyor.

+2

FYI: Hayır, bunun için füzyon kullanamazsınız, çünkü fxx filtreleri, füzyonun sağlayabileceğinden daha iyi bir şekilde, filtre grafiğinde doğru kayıt için daha fazla reg tuşa ihtiyaç duyar. – wqw

+0

@wqw Böyle bir durumda, bunu bir yanıt olarak eklemek isteyebilirsiniz, çünkü bir COM bileşenini kaydetmeden kullanma yaklaşımlarının hiçbiri bu durum için çalışmayacaktır. –

+0

@wqw: Yine de bu şeyler için RegOverridePredefKey kullanabilirsiniz. (http://msdn.microsoft.com/en-us/library/ms724901%28VS.85%29.aspx) –

1

Bir COM örneği oluşturduğunuzda, Windows kayıt defterinde bakar, ne yükleneceğini öğrenir, nasıl yüklenir ve sonra dll'yi yükler ve aradığınız sınıfı bulur. Bu arama algoritmasını atlamak istiyorsanız, bunu uygulamak zorundasınız ve bunun kolay olmadığını düşünüyorum. Ama kesinlikle yapılabilir.

GÜNCELLEME: CoLoadLibrary işlevini arayın, belki de o kadar da zor değil. COM sunucularının yüklendiklerinde CoRegisterClassObject'i çağırdıklarını düşünüyorum, Windows bunları nasıl bulur ve CoGetClassObject öğesini çağırabilirsiniz. Yine de karanlıktayım, o yüzden devam edin ve MSDN'i okuyun.

3

DllLetClassObject() giriş noktası almak için LoadLibrary() ve GetProcAddress mümkündür. Başarı çukuruna düşmek için tasarlanmış bir grup COM tesisat kodunu atlıyorsunuz. Özellikle ThreadingModel ile ilgilenen şeyler. Ya da 64-bit bir işlemde 32-bit kod çalıştırmak için kullanabileceğiniz hileler, video ile önemli olma eğilimindedir.

Reg-free COM'u bir manifest ile kullanmak o çukura geri dönmenizi sağlayabilir.

+0

+1, bunu ciddi bir sorun olmadan yaparız. Bir uyarı, hiç marshalling olmayacak. – sharptooth

İlgili konular