5

我想以我没有受过正式的 C++ 培训的事实作为开头,所以如果您有建议,请以超级菜鸟可以实施的方式提供。
先感谢您。
我想做的是从 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