图像处理c: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();
}
}
}
Tags:  c语言字符串处理 图像处理软件c 440c热处理 图像处理c

延伸阅读

最新评论

发表评论