当前位置:   article > 正文

托管类调用非托管类(C#,C++,CLI,传递指针数组)_托管类成员不能是非托管类类型

托管类成员不能是非托管类类型

开发工具Visual Studio 2008

步骤:

1 启动Visual Studio 2008,新建CLR类库,如图:

2 在CLR_DLL.h输入代码如下(注意代码书写的顺序):

  1. // CLR_DLL.h
  2. #pragma once
  3. using namespace System;
  4. namespace CLR_DLL {
  5. //非托管类
  6. class UClass{
  7. public:
  8. int m_int;
  9. UClass():m_int(4){};
  10. int GetValue(){
  11. return m_int;
  12. }
  13. };
  14. //托管类
  15. public ref class MClass{
  16. public:
  17. int val;
  18. UClass* unc;
  19. MClass(){
  20. unc=new UClass();
  21. }
  22. int GetValue(){
  23. return unc->GetValue();
  24. }
  25. };
  26. }

3  在项目CLR_DLL右击鼠标,点击生成,如下图:

4 新建c#项目进行测试,右击解决方案,选择添加---新建项目,如下图:

5 选择Visual c#  -->控制台应用程序-->名称 CharpMain--->确定,如下图:

6  设置c#项目为启动项目,在项目CharpMain右击鼠标,选择  设为启动项目,如下图:

7 添加项目引用CLR_DLL,在项目CharpMain右击鼠标,选择添加引用,如下图:

8 在弹出的对话框中,选择  项目--->CLR_DLL--->确定,如下图:

9  在Program.cs中输入代码,如下:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using CLR_DLL;
  6. namespace CharpMain
  7. {
  8. class Program
  9. {
  10. static void Main(string[] args)
  11. {
  12. MClass uclass = new MClass();
  13. Console.WriteLine("输出值为:"+uclass.GetValue());
  14. Console.ReadKey();
  15. }
  16. }
  17. }

10  运行结果如下图:

 

 

 

 

传递指针数组

1 把上面的CLR_DLL.h程序修改为:

  1. // CLR_DLL.h
  2. #pragma once
  3. using namespace System;
  4. namespace CLR_DLL {
  5. //非托管类
  6. class UClass{
  7. public:
  8. int Call(int *p){
  9. int p0=p[0];
  10. int p1=p[1];
  11. return p0+p1;
  12. }
  13. };
  14. //托管类
  15. public ref class MClass{
  16. public:
  17. UClass* unc;
  18. MClass(){
  19. unc=new UClass();
  20. }
  21. int GetValueInStar(array<int> ^arr){
  22. pin_ptr<int> pin=&arr[0];
  23. int result=unc->Call(pin);
  24. pin=nullptr;
  25. return result;
  26. }
  27. };
  28. }

然后重新生成,在项目CLR_DLL上右击鼠标,选择重新生成,如下图:

2 把c#项目中的Program.cs修改为:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using CLR_DLL;
  6. namespace CharpMain
  7. {
  8. class Program
  9. {
  10. static void Main(string[] args)
  11. {
  12. MClass uclass = new MClass();
  13. int[] array = {2,2,3,4,5};
  14. Console.WriteLine("输出为: "+uclass.GetValueInStar(array));
  15. Console.ReadKey();
  16. }
  17. }
  18. }

3 运行结果如下图:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/664622
推荐阅读
相关标签
  

闽ICP备14008679号