//
現(xiàn)在有本機代碼的C++類ClassCpp和CLI代碼的C++類EncapCpp2Csharp
使用VC++2008的/clr編譯選項編譯可為.NET語言可引用的DLL
//
#include
#include
#include
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();
//轉(zhuǎn)換為.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();
}
}
}
現(xiàn)在有本機代碼的C++類ClassCpp和CLI代碼的C++類EncapCpp2Csharp
使用VC++2008的/clr編譯選項編譯可為.NET語言可引用的DLL
//
#include
#include
#include
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();
//轉(zhuǎn)換為.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();
}
}
}