5

正式なC++トレーニングがないという事実を前に付けておきたいので、提案があれば、supernoobが実装できる方法で提供してください。
前もって感謝します。
私がやろうとしているのは、構造体とデリゲートのC#パスからC++関数を呼び出すことです。
コードは機能しますが、デリゲートの値にアクセスすると、次のエラーが発生します
エラー画像を委任する
。c#コードは次のとおりです。

public delegate void CallBackMethodDelegate(MP4CreateClipProcessingData data);

[DllImport("libmp4v2.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
[return: MarshalAs(UnmanagedType.LPStr)]
public extern static string MP4CreateClip(ref MP4CreateClipProcessingData data, CallBackMethodDelegate del);

そして、これが私のC++コードです。

struct MP4CreateClipProcessingData
{
    bool err;
    char* sourcePath;
    char* targetPath;
    char* error;
    uint32_t startTime;
    uint32_t duration;
};

extern "C" __declspec(dllexport) void MP4CreateClip(MP4CreateClipProcessingData data, void (_stdcall *func)(MP4CreateClipProcessingData))
{
    func(data);
}

ここで、C#コードで関数を呼び出します。

var data = new NativeMethods.MP4CreateClipProcessingData(file, Path.Combine(targetPath, Path.GetFileName(file).ToString()));
NativeMethods.CallBackMethodDelegate retDel = new NativeMethods.CallBackMethodDelegate(NativeMethods.returnCall);
NativeMethods.MP4CreateClip(ref data, retDel);
4

0 に答える 0