私はこのようなC#のからメソッドを呼び出すのです解放:はVC#にVC++からulong64配列を渡すとメモリ
[DllImport(@"C:\Hash.dll",
CallingConvention = CallingConvention.Cdecl)]
public static extern IntPtr ph_dct_videohash(
string file,
ref int length);
static void Main(string[] args)
{
int length = 0;
ph_dct_videohash(@"C:\Users\shady\H.avi", ref length);
Console.Read();
}
をそしてここで私は、ライブラリから呼び出しています方法であるに
ulong64* ph_dct_videohash(const char *filename, int &Length){
CImgList<uint8_t> *keyframes = ph_getKeyFramesFromVideo(filename);
if (keyframes == NULL)
return NULL;
Length = keyframes->size();
ulong64 *hash = (ulong64*)malloc(sizeof(ulong64)*Length);
//some code to fill the hash array
return hash;}
質問は、どのように私はC#で符号なし64ビットロング配列を取得し、それを使用した後にメモリを解放することです。それが私にとってガベージコレクタによって管理されるならば、それはさらに良いでしょう。
私はMarshal.copyを試しましたが、動作しませんでした。memリークが発生する恐れがあります(memが自動的に解放されるかどうかわかりません)。どんな助けもありがとう。ありがとう。
を引数として渡してください。メモリの所有権の問題やコピーが不要です。 –
引数を使って日付へのポインタを渡すと、C#で解放する必要がありますか?私はこの問題がどのように解決するのかよく分かりません。 – Tormentor308
いいえ、管理対象メモリはガベージコレクタによって処理されます。 –