如果类是个泛型类的话dllImport 代码不能编译

你可能需要在dllImport代码中使用泛型类。但是你知道下面的代码段能通过编译么?

1 open System.Runtime.InteropServices
2  
3 type B<'T>() = 
4     member this.F() = ()
5  
6 module A = 
7     [<DllImport("aa")>]
8 extern void AA(B<int> a)

答案是否定的。

注意最后一行将抛出一个错误:Unexpected type application  in extern declaration. Expected ')' or other token.

你可能会说“aa”不是一个有效的dll 名字。但是这不重要。如果dll 名字是有效的,同样会有相同的编译问题。编译器给我们这个错误是因为在这种情况下泛型类将不会被编译,尽管这个错误信息有点模棱两可。

这是个当前不会去修复的问题。

posted @ 2012-06-08 17:32  tryfsharp  阅读(223)  评论(0编辑  收藏  举报