C++/CLIを使っていてマネージのString文字列からconst wchar_tのポインタを直接取得する方法です。これって結局単純に PtrToStringChars で pin_ptr すれば良いだけのようです。つまり、
String^ str = gcnew String("日本語文字列");
pin_ptr<const wchar_t> pStr = PtrToStringChars(str);
:
pStr = nullptr; // 使い終わったらpin_ptrを開放しておきましょう
とやれば良い。ちなみにMSDNサイトでも
「方法 : System::String の文字にアクセスする」で解説してあります。
実は今CAPICOMだけだった部分をWin32のCAPIでも使えるように機能追加中です。CAPIはアンマネージのAPIなのでマネージの文字列から直接ポインタ取得できないかと調べた1ポイント情報でした。CAPICOM使うと便利なんですがCAPICOMのDLLも過去に脆弱性が発見されたり更新が面倒だったりと依存しない方が便利なケースも多いように感じています。