Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Jednym ze sposobów określenia, czy obraz został utworzony dla środowiska uruchomieniowego języka wspólnego, jest użycie dumpbin /CLRHEADER polecenia . Aby uzyskać więcej informacji, zobacz /CLRHEADER.
Można również programowo sprawdzić, czy obraz został utworzony dla środowiska uruchomieniowego języka wspólnego. Aby uzyskać więcej informacji, zobacz How to: Detect /clr compilation (Instrukcje: wykrywanie kompilacji /clr).
Przykład
Poniższy przykład określa, czy obraz został skompilowany do uruchomienia w środowisku uruchomieniowym języka wspólnego.
// 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]));
}
Zobacz też
Korzystanie z międzyoperacyjności języka C++ (niejawna funkcja PInvoke)