打印本文 打印本文  关闭窗口 关闭窗口  
C++/CLI的封送处理
作者:佚名  文章来源:不详  点击数  更新时间:2008/11/1 20:41:14  文章录入:杜斌  责任编辑:杜斌

  //
  现在有本机代码的C++类ClassCpp和CLI代码的C++类EncapCpp2Csharp
  使用VC++2008的/clr编译选项编译可为.NET语言可引用的DLL
  //
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  class ClassCpp
  {
  public:
  ClassCpp(void){ strcpy_s(m_szTemp,""); }
  virtual ~ClassCpp(void){}
  public:
  void SetString(const char* pchar)
  {
  strcpy_s(m_szTemp,pchar);
  printf("%s\n",m_szTemp);
  }
  const char* GetString()
  {
  strcpy_s(m_szTemp,"Hello! 我是 C++.");
  return m_szTemp;
  }
  private:
  char m_szTemp[128];
  };
  //
  using namespace System;
  using namespace System::Runtime::InteropServices;
  //CLI代码C++类
  namespace SnycStudio { namespace EncapsulationTest {
  //测试[C++ > C# & C# > C++] 的封送处理
  public ref class EncapCpp2Csharp
  {
  public:
  EncapCpp2Csharp(void) { m_pClassCpp new ClassCpp; }
  virtual ~EncapCpp2Csharp(void) { delete m_pClassCpp; }
  public:
  //字符串
  void SetString(String^ str)
  {
  char* pch (char*)Marshal::StringToHGlobalAnsi(str).ToPointer();
  m_pClassCpp->SetString(pch); //把.NET的String类型传递到本机代码类ClassCpp
  }
  String^ GetString()
  {
  //取得本机代码类的字符串
  const char* pch m_pClassCpp->GetString();
  //转换为.NET的String类型
  String^ str Marshal::PtrToStringAnsi((IntPtr)(char*)pch);
  return str;
  }
  void GetString(String^% str)
  {
  const char* pch m_pClassCpp->GetString();
  str Marshal::PtrToStringAnsi((IntPtr)(char*)pch);
  }
  private:
  ClassCpp* m_pClassCpp;
  };
  }}
  //
  //C#程序
  //
  using System;
  using System.Collections.Generic;
  using System.Linq;
  using System.Text;
  using SnycStudio.EncapsulationTest;
  namespace HelloWorld
  {
  class Program
  {
  static void Main(string[] args)
  {
  EncapCpp2Csharp ec2s new EncapCpp2Csharp();
  string strTemp1 ec2s.GetString();
  Console.WriteLine(strTemp1);
  string strTemp2 "";
  ec2s.GetString(ref strTemp2);
  Console.WriteLine(strTemp1);
  Console.ReadLine();
  }
  }
  } 考试大等级站收集整理!
打印本文 打印本文  关闭窗口 关闭窗口