ExecutionEngineException at InterlockedExchange()

(つづきました)

InterlockedExchange 関数は公式の説明からしてすでに怪しい感じなのですが、

docs.microsoft.com

 

第一引数 *Target へ Value を設定する、みたいな説明になってますけども。

Exchange ですよ? 交換って意味ですからね?

実際に WinDbg で見ると xchg 命令使ってますしw

 

Value はぶっ壊してますよこの関数。

しかも Value は関数へのポインタなんで、値をぶち込んだらそりゃ怒られますよねえw

 

というか関数ポインタを InterlockedExchange() を使って設定しようなんていう

コードがそもそも間違いなのかも。

 

実は、InterlockedExchangePointer() が InterlockedExchange() を使っていまして。「Exchange」と名前についている時点で怪しさプンプンなので気づくべきでしたね。

 

そんな感じですかね。

CLR でメモリアクセス違反になってる、このコードは無茶しすぎです。