簡體   English   中英

C ++ / CLI DLL中的本機代碼

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM