Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Eine Möglichkeit, um zu bestimmen, ob ein Image für die Common Language Runtime erstellt wurde, besteht darin, den dumpbin /CLRHEADER
Befehl zu verwenden. Weitere Informationen finden Sie unter /CLRHEADER
.
Sie können auch programmgesteuert überprüfen, ob ein Image für die Common Language Runtime erstellt wurde. Weitere Informationen finden Sie unter How to: Detect /clr compilation.
Beispiel
Im folgenden Beispiel wird ermittelt, ob ein Image für die Laufzeit der gemeinsamen Sprache erstellt wurde.
// detect_image_type.cpp
// compile with: /clr
using namespace System;
using namespace System::IO;
enum class CompilationMode {Invalid, Native, CLR };
static CompilationMode IsManaged(String^ filename) {
try {
array<Byte>^ data = gcnew array<Byte>(4096);
FileInfo^ file = gcnew FileInfo(filename);
Stream^ fin = file->Open(FileMode::Open, FileAccess::Read);
Int32 iRead = fin->Read(data, 0, 4096);
fin->Close();
// Verify this is a executable/dll
if ((data[1] << 8 | data[0]) != 0x5a4d)
return CompilationMode::Invalid;
// This will get the address for the WinNT header
Int32 iWinNTHdr = data[63]<<24 | data[62]<<16 | data[61] << 8 | data[60];
// Verify this is an NT address
if ((data[iWinNTHdr+3] << 24 | data[iWinNTHdr+2] << 16 | data[iWinNTHdr+1] << 8 | data[iWinNTHdr]) != 0x00004550)
return CompilationMode::Invalid;
Int32 iLightningAddr = iWinNTHdr + 24 + 208;
Int32 iSum = 0;
Int32 iTop = iLightningAddr + 8;
for (int i = iLightningAddr; i < iTop; ++i)
iSum |= data[i];
if (iSum == 0)
return CompilationMode::Native;
else
return CompilationMode::CLR;
}
catch(Exception ^e) {
throw(e);
}
}
int main() {
array<String^>^ args = Environment::GetCommandLineArgs();
if (args->Length < 2) {
Console::WriteLine("USAGE : detect_clr <assembly_name>\n");
return -1;
}
Console::WriteLine("{0} is compiled {1}", args[1], IsManaged(args[1]));
}