C++/CLI 的封送处理 - 字符串

//=======================================================================================
现在有本机代码的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();
        }
    }
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值