经典的互操作源如下:
[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