.net frameworkから古いタイプのDLL(アンマネージ)を呼ぶ際に ハマりまくったのでメモを残しておく。
1) GCHandle.Alloc はmanaged objectとしてのヒープメモリであり、 Pin指定してもアンマネージDLLに渡すとアドレスが変わってしまいすぐに落ちる。
Marshal.AllocHGlobalはアンマネージのヒープ領域に取られた メモリ断片であり、アンマネージのDLLに安全に渡せ、正常に動作する。
.net frameworkから古いタイプのDLL(アンマネージ)を呼ぶ際に ハマりまくったのでメモを残しておく。
1) GCHandle.Alloc はmanaged objectとしてのヒープメモリであり、 Pin指定してもアンマネージDLLに渡すとアドレスが変わってしまいすぐに落ちる。
Marshal.AllocHGlobalはアンマネージのヒープ領域に取られた メモリ断片であり、アンマネージのDLLに安全に渡せ、正常に動作する。