[英]Native code in C++/CLI DLL
我希望盡可能接近實時,因此我的意圖是使代碼中最關鍵的部分不受管理(我不想讓GC阻止執行)。 所以我嘗試了這個:
class Native
{
public:
int GetValue()
{
return 1;
}
};
ref class Managed
{
public:
void Test()
{
Native n;
Console::WriteLine(n.GetValue());
}
};
ILDASM顯示Native :: GetValue編譯為IL。 是否可以使此類/功能不受管理? 專用的非托管dll是唯一的方法嗎?
看來我需要#pragma指令:
#pragma unmanaged
class Native
{
public:
int GetValue()
{
return 1;
}
};
#pragma managed
ref class Managed
{
public:
void Test()
{
Native n;
Console::WriteLine(n.GetValue());
}
};
C ++-CLI是托管擴展,使您可以直接使用示例中顯示的.NET功能,例如Console.WriteLine
。 它被編譯成托管程序集。 如果要使用非托管代碼,則必須指示編譯器生成非托管代碼。 但是在這種情況下,顯然您將不得不忘記.NET函數。
嗯,我可能誤解了您的要求,但我對此感到cho惱:
我不想GC阻止執行
這取決於您使用的互操作方案,但是通常,僅通過使應用程序的某些部分不受管理,就無法防止執行線程的掛起。 無論調用線程是否恰好執行“非托管”代碼,任何在調用堆棧中具有CLR根的線程都可以被GC劫持和暫停。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.