Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Ett sätt att avgöra om en avbildning har skapats för Common Language Runtime är att använda dumpbin /CLRHEADER kommandot. Mer information finns i /CLRHEADER.
Du kan också programmatiskt kontrollera om en bild har skapats för Common Language Runtime (CLR). Mer information finns i Så här identifierar du /clr-kompilering.
Exempel
Följande exempel avgör om en bild har skapats för att köras på den gemensamma språkruntime-miljön.
// 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]));
}