Nasıl yok C# derleyici COM türünü tespit eder?
DÜZENLEME:Sonuçlar blog post olarak yazdım.
C# derleyicisi COM türleri biraz sihirli bir şekilde davranır. Örneğin, bu ifade normal görünüyor...
Word.Application app = new Word.Application();
... Application
anlasan kadar bir arabirim. Bir arabirim? bir kurucu çağırmak Yoiks! Bu aslında Type.GetTypeFromCLSID()
Activator.CreateInstance
başka bir telefon çevrilmiş olur.
Ayrıca, C# 4, ref
parametrelerin non-ref değişkenleri kullanabilirsiniz, ve derleyici sadece yerel bir değişken referans geçmek, sonuçları atarak ekler:
// FileName parameter is *really* a ref parameter
app.ActiveDocument.SaveAs(FileName: "test.doc");
(Evet, tartışmalar eksik bir sürü vardır. İsteğe bağlı parametreler güzel değil mi? :)
Derleyici davranışlarını araştırmak için çalışıyorum, ve sahte ilk bölümü başarısız oluyorum. Hiçbir sorun ile ikinci bölümü yapabilirim:
using System;
using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;
[ComImport, GuidAttribute("00012345-0000-0000-0000-000000000011")]
public interface Dummy
{
void Foo(ref int x);
}
class Test
{
static void Main()
{
Dummy dummy = null;
dummy.Foo(10);
}
}
Yazmak istiyorum:
Dummy dummy = new Dummy();
gerçi. Açıkçası yürütülmesi sırasında patlama olacak, ama sorun değil. Sadece deniyorum.
Diğer öznitelikleri bağlı COM PIA için derleyici (CompilerGenerated
TypeIdentifier
) tarafından eklenen hile... sihirli sos nedir? gibi görünmüyor
CEVAP
Hayır yani ben bir uzman değilim, ama son zamanlarda düşündüğüm şeyi üzerine tökezledi: CoClass öznitelik sınıfı.
[System.Runtime.InteropServices.CoClass(typeof(Test))]
public interface Dummy { }
Coclass malzemeleri beton uygulama(lar), bir veya daha fazla arayüzleri. COM, bu beton uygulamaları herhangi bir yazılabilir COM destekleyen programlama dili örneğin Delphi,bileşen geliştirme C , Visual Basic, vb.
Görebileceğin yerde my answer to a similar question about the Microsoft Speech API, "başlatılamadı" arabirimi SpVoice
(ama gerçekten, SPVoiceClass
başlatmasını sen).
[CoClass(typeof(SpVoiceClass))]
public interface SpVoice : ISpeechVoice, _ISpeechVoiceEvents_Event { }
Nasıl cmake ile bir derleyici c 11 des...
Nasıl sadece bir kullanıcının git bir ...
Nasıl JavaScript devre dışı olup olmad...
Nasıl Python değişken türünü belirleme...
Nasıl C/C tamsayı taşması tespit etmek...