日期:2014-05-17  浏览次数:20725 次

C#使用非托管dll
最近遇到C#使用非CLR动态链接库的问题。有很多东西不太明白,特来请教高手帮忙。
  1、C#代码在CLR环境中都是自动分配和释放内存的。 如果C/C++编写的dll中有动态分配内存的情况,CLR去调用的时候会怎么处理呢?c/c++ dll动态分配的内存会在真正的堆上吗?如果是,那dll的环境和CLR的环境岂不就是独立的。怎么可能呢?如果dll动态分配的内存被CLR管理,那么如果dll中动态分配了一个结构体对象,并返回这个结构体对象的引用,我们在外部如何使用这个引用并访问结构体的成员。
  2,如果dll需要传递一个结构体对象的引用,我们如何在C#代码中为c/c++的dll准备这个参数呢?

高手可以用代码举个例子吗?不胜感激。



------解决方案--------------------
看下这个,很详细,关于结构体的也有!http://wenku.baidu.com/view/5126f84b2b160b4e767fcf85.html?st=1
------解决方案--------------------
ref 修饰
------解决方案--------------------
1. c/C++分配的内存一样在heap,只不过没有clr帮你管理内存了,因此你需要自己释放。
2. 参考msdn:
How to: Marshal Structures Using PInvoke
http://msdn.microsoft.com/en-us/library/ef4c3t39.aspx