aを aに「変換」することはできませんが、 a (つまり、 aへのポインター) を aに「変換」することはできます。CString
void*
CString*
CString
void*
// Create a CString object
CString str(_T("Foo"));
// Store CString address in a void* pointer
void* ptr = &str;
// Cast from void* back to CString*
CString* pstr = static_cast<CString*>(ptr);
// Print CString content
_tprintf(_T("%s\n"), pstr->GetString());
ただし、何か違うことをしているようです。つまり、オブジェクトのアドレス (ポインター) を整数形式の文字列としてCString
. 次に、のような解析関数を使用して、文字列から整数値を取得する必要があります_tcstoul()
。これは機能しているようですが、さらにテストが必要です。
#include <stdlib.h>
#include <iostream>
#include <ostream>
#include <string>
#include <atlbase.h>
#include <atldef.h>
#include <atlstr.h>
using namespace std;
using namespace ATL;
// Some test class
struct MyClass
{
string Foo;
int Bar;
MyClass(const string& foo, int bar)
: Foo(foo), Bar(bar)
{}
};
// Test
int main()
{
// Create some object
MyClass c("A foo", 10);
// Get the address of the object
void* ptr = &c;
// Format the address into a string
CString str;
str.Format(_T("%p"), ptr);
// Parse the address from string
void* ptr2 = reinterpret_cast<void*>( _tcstoul( str.GetString(), nullptr, 16 ) );
// Get back the original MyClass pointer
MyClass* pMyClass = static_cast<MyClass*>(ptr2);
// Check result
cout << pMyClass->Foo << endl;
cout << pMyClass->Bar << endl;
}