經典的互操作源如下:
[System.Runtime.InteropServices.DllImport("opengl32.dll", EntryPoint = "glActiveTexture", ExactSpelling = true)]
internal extern static void glActiveTexture(int texture);
換言之,靜態例程glActiveTexture在應用路徑發現open32.dll二進制被發現,與簽名(入口點)glActiveTexture。
有時候事情並不那麼容易。例如:
[System.Runtime.InteropServices.DllImport("opengl32.dll", EntryPoint = "glGetActiveUniform", ExactSpelling = true)]
internal extern static unsafe void glGetActiveUniform(uint program, uint index, Int32 bufSize, [Out]Int32 length, [Out]int size, [Out]int type, [Out]StringBuilder name);
你可以注意到參數之前[OUT]。該參數屬性用於指示例程glGetActiveUniform將輸出這些變量的數據,因爲它們實際上是該函數寫入的指針。
這是用於將互操作編組,這意味着,在進出外部例程參數的運行時副本(即:所述[OUT]屬性指示可變複製出來一旦例程作爲退出)。
上面的代碼是由我的應用程序生成的,具有函數規範(在本例中爲OpenGL)。我見過類似的代碼生成器,它需要一個C頭文件。
據我所知,你想實現這個dinamically,在運行時加載二進制文件。那麼......我會是一個艱鉅的任務,因爲必須有一種方法來爲每個庫使用伴隨配置來創建這些委託,但實際上我不知道這對任何語言都是可能的。
程序集不是用C寫的.exe或dll可能是,但它們不是程序集。 – erikkallen 2010-12-12 16:58:32