c#DllImport c ++ dll错误:尝试读取或写入受保护的内存

时间:2015-10-01 17:57:57

标签: c# c++ dll

这是我的C ++代码:

ExportAPI.cpp

extern "C"
{
    EXPORT_API int test(int a, int b){
        return a*b;
    }

    EXPORT_API bool InitializeApplication( HWND hwnd)
    {
        CCEGLView::SetParentHwnd(hwnd);
        CCApplication::sharedApplication()->run();
        return true;
    }
}

C#:

public partial class MainWindow : Window
    {
      [DllImport("libcc.dll", CallingConvention=CallingConvention.Cdecl)]
      public static extern bool InitializeApplication(IntPtr hwnd);

    [DllImport("libcc.dll", CallingConvention = CallingConvention.Cdecl)]
    public static extern int test(int a, int b);

    public MainWindow()
    {
        InitializeComponent();
        Loaded += MainWindow_Loaded;
        Closed += MainWindow_Closed;
    }

    void MainWindow_Loaded(object sender, RoutedEventArgs e)
    {
        Window window = Window.GetWindow(this);
        var wih = new WindowInteropHelper(window);
       Debug.WriteLine(Multiply(3, 4).ToString()); //this runs
        InitializeApplication(wih.Handle); //this gives error
    }
}

所以基本上我要做的就是将wpf窗口设置为我的c ++应用程序的父级(我在.dll中包含')。但当我运行时,我得到“附加信息:尝试读取或写入受保护的内存。这通常表明其他内存已损坏。”例外。

抱歉我的英语。 非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

听起来像CCEGLView::SetParentHwnd(hwnd);CCApplication::sharedApplication()->run();中的错误。 Enable Native Code Debugging找到问题的根源。