C++/CLI的封送处理 |
|
www.nanhushi.com 佚名 不详 |
// 现在有本机代码的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(); } } } 考试大等级站收集整理!
|
|
|
文章录入:杜斌 责任编辑:杜斌 |
|
上一篇文章: C++实例:SDK中控制滚动条 下一篇文章: C++Win32APIReadFile()读取文件 |
【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |
|
|