dポイントプレゼントキャンペーン実施中!

以下、サンプルですが、ポインタ・ハンドル間のコピーと
表示方法がわかりません。
VC++2005を使っている方、教えてください。

/*
C++
ポインタとハンドル間のコピーと、表示させる方法が知りたいです。
*/

using namespace System;

namespace test {
class Class1 {
char msg[1024];
public:
Class1(String^ _msg){
// _msgを msgにコピーする ポインターに
// msgを表示
}
};
ref class Class2 {
static String ^msg = nullptr;
public:
Class2(char *_msg){
// _msgを msgにコピー ハンドル?に
// msgを表示
}
};

}

//-----------------------------------------------
// こんな書き方でよいのか? 古いC?
// 引数は必要ないのでしょうか?
//-----------------------------------------------
int main(){
test::Class1* c1 = new test::Class1("test1");
delete c1;

test::Class2^ c2 = gcnew test::Class2("test2");

return 0;
}

A 回答 (1件)

#include <algorithm>


#include <iostream>
#include <cstring>

using namespace System;
using namespace System::Runtime::InteropServices;

namespace test {

class Class1 {
char msg[1024];
public:
Class1(String^ _msg){
void* ptr = Marshal::StringToHGlobalAnsi(_msg).ToPointer();
std::strcpy(msg, static_cast<char*>(ptr));
Marshal::FreeHGlobal(IntPtr(ptr));
std::cout << '[' << msg << ']' << std::endl;
}
};

ref class Class2 {
String ^msg;
public:
Class2(char *_msg){
msg = gcnew String(_msg);
Console::WriteLine(L"[{0}]", msg);
}
};

}

int main() {
test::Class1* c1 = new test::Class1("test1");
delete c1;
test::Class2^ c2 = gcnew test::Class2("test2");
return 0;
}

※ 解説はご勘弁。マニュアルを読んでください。
    • good
    • 0
この回答へのお礼

すごいです。

ありがとうございます。

お礼日時:2007/08/08 08:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!