LoginSignup
0
0

More than 1 year has passed since last update.

C++/CLIでグローバル変数にハンドルを保存する方法

Posted at

1. はじめに

C++/CLIでハンドルをグローバル変数に保存しようとして、

static System::String^ s;

などと書くと、
「静的ストレージ存続期間のある変数にハンドルや追跡参照型を指定することはできません」
とコンパイルエラーになります。

なんとかハンドルをグローバル変数に保存したく、下記の方法を考えました。
C++/CLIは詳しくないので、問題ないかどうかまだ評価中です。

Windows 10、.NET Framework 4.8、Visual Studio 2019で確認しています。

2. GCHandleを使う

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

static GCHandle gcStr;

int main(int argc, char** argv) {
    System::String^ str = "abc";

    // アンマネージドメモリに保存
    gcStr = GCHandle::Alloc(str);

    // 保存したハンドルを取り出す
    System::String^ str2 = safe_cast<System::String^>(gcStr.Target);

    Console::WriteLine(str2);
}

3. 参考

C++/CLI #5: safe_cast (mixi 日記アーカイブ)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0