Aracılığıyla paylaş


dosyaları bağlayıcı olarak .netmodule giriş

Link.exe şimdi MSIL .obj kabul eder ve. giriş olarak netmodules. Linker tarafından üretilen çıktı dosyası derleme olur veya bir. netmodule .obj üzerinde hiçbir çalışma zamanı bağımlılığı veya. linker girişlermiş netmodules.

. netmodules ile Visual C++ Derleyici tarafından oluşturulan Sırasıyla (MSIL modül oluşturma) veya bağlayıcı ile / noassembly (MSIL modül oluşturma). .objs her zaman bir Visual C++ derlemesi içinde oluşturulur. Diğer Visual Studio derleyiciler için kullanmak /target:module derleyici seçeneği.

Çoğu durumda, linker oluşturulan Visual C++ derlemesi .obj dosyasını göndermesi gerekir. netmodule, sürece. netmodule ile oluşturulmuş /CLR (ortak dil çalışma zamanı derleme). MSIL. Visual C++ derleyicisi kullanılarak üretilen saf MSIL linker girdi olarak kullanılan netmodules /clr:safe. Diğer Visual Studio derleyiciler saf MSIL modülleri, varsayılan olarak üretir.

Komut satırından linker çağırmak konusunda daha fazla bilgi için bkz: Linker komut satırı sözdizimi ve Satýrý yapýlarý için yol ve ortam değişkenlerini ayarlama.

Geçirerek bir. Visual C++ derleyicisi ile derlenmiş linker netmodule veya .dll dosyasına /clr veya /clr:pure bir bağlayıcı hatasına neden. Daha fazla bilgi için bkz. Giriş dosyaları .netmodule biçimi seçme.

Linker ile derlenmiş MSIL .obj dosyalarının yanı sıra, doğal .obj dosyalarının kabul /clr, /clr:pure, veya /clr:safe. Karma .objs aynı yapı geçirilirken, verifiability elde edilen çıktı dosyasının varsayılan olarak, giriş modüllerini verifiability düşük düzeyde eşit olacaktır. Örneğin, güvenli ve saf .obj linker aktarýrsanýz, çıktı dosyası saf olacaktır. / CLRIMAGETYPE (clr görüntü türünü belirtin)gerekenler ise, verifiability, daha düşük düzeyde belirtmenizi sağlar.

Oluşan uygulama iki veya daha fazla derleme, şu anda var ve bir derlemede yer alması için uygulamanın hangi, derlemeleri yeniden derleyin ve .objs bağlamak gerekir veya. tek bir derleme üretmek için netmodules.

Bir giriş noktası kullanılarak belirtilmeli / GİRİŞİ (giriş noktası simgesi) yürütülebilir bir görüntü oluştururken.

Bir MSIL .obj ile bağlanırken veya. netmodule dosyası, kullanım / ltcg (bağlantı zamanı kod oluşturma), linker MSIL .obj karşılaştığında başka türlü veya. netmodule, /ltcg ile bağlantı yeniden başlatılır.

MSIL .obj veya. netmodule dosya cl.exe için de geçirilebilir.

MSIL .obj giriş veya. netmodule dosyaları kaynakları gömülü olamaz. Bir kaynak ile (modül veya derleme) bir çıktı dosyasına katıştırılmış olan / assemblyresource (yönetilen bir kaynağın katıştırma) linker seçeneği ile veya /resource diğer Visual Studio derleyiciler derleyici seçeneği.

MSIL bağlayarak gerçekleştirirken ve ayrıca belirtmezseniz / ltcg (bağlantı zamanı kod oluşturma), bağlantıyı yeniden başlıyor bildirdiği bilgilendirici bir ileti görürsünüz. Bu ileti, ancak bağlama MSIL ile linker performansını artırmak üzere sayılabilir, açıkça belirtmek /LTCG.

Örnek

C++ kodu olmayan sistem özel durumu için karşılık gelen bir try catch bloğunu çağrılacak. Ancak, varsayılan olarak, sistem dışı durumlarla clr sarar RuntimeWrappedException. Ne zaman bir derleme Visual C++ oluşturulur ve Visual C++ olmayan modüller ve C++ kodu eklemeniz gerekir try bloğunun olmayan sistem özel durum oluşturduğunda, ilgili kendi deneme yan çağrılacak catch bloðunda istiyorsanız

[assembly:System::Runtime::CompilerServices::RuntimeCompatibility(WrapNonExceptionThrows=false)] özniteliği olmayan C++ modülleri için kaynak kodu.

// MSIL_linking.cpp
// compile with: /c /clr
value struct V {};

ref struct MCPP {
   static void Test() {
      try {
         throw (gcnew V);
      }
      catch (V ^) {
         System::Console::WriteLine("caught non System exception in C++ source code file");
      }
   }
};

/*
int main() {
   MCPP::Test();
}
*/

WrapNonExceptionThrows özniteliği Boolean değerini değiştirerek yeteneği olmayan sistem özel durumu yakalamak için Visual C++ kodu değiştirin.

// MSIL_linking_2.cs
// compile with: /target:module /addmodule:MSIL_linking.obj
// post-build command: link /LTCG MSIL_linking.obj MSIL_linking_2.netmodule /entry:MLinkTest.Main /out:MSIL_linking_2.exe /subsystem:console
using System.Runtime.CompilerServices;

// enable non System exceptions
[assembly:RuntimeCompatibility(WrapNonExceptionThrows=false)]

class MLinkTest {
   public static void Main() {
      try {
         MCPP.Test();
      }
      catch (RuntimeWrappedException) {
         System.Console.WriteLine("caught a wrapped exception in C#");
      }
   }
}
  

Ayrıca bkz.

Başvuru

BAĞLANTI giriş dosyaları

Bağlantı Oluşturucu Seçenekleri