c# - 包装 C 结构以在 WPF 应用程序中进行访问

标签 c# c++ wpf struct wrapper

对于我的一个项目,我想包装一个 C 结构体以便在 C# 代码中使用它。 我的 C++ 算法返回一个结构对象,我希望查看 C#/WPF 代码中包含的信息。

当我尝试“我的方式”时,我在编译时收到一条错误消息: “‘Wrapper.WrapperAlgo.createMediumMap()’由于其保护级别而无法访问”

我的 C# 代码:

public partial class MainWindow : Window
{    
    unsafe public MainWindow()
    {
        WrapperAlgo algo = new WrapperAlgo();
        square** map = (square**)algo.createMediumMap();
    }
}

我的包装

#ifndef __WRAPPER__
#define __WRAPPER__

#include "../CivilizationAlgo/mapalgo.h"
#pragma comment(lib, "../Debug/CivilizationAlgo.lib")

using namespace System;

namespace Wrapper {
    public ref class WrapperAlgo {
        private:
            Algo* algo;
    public:
        WrapperAlgo(){ algo = Algo_new(); }
        ~WrapperAlgo(){ Algo_delete(algo); }
        square** createSmallMap() { return algo->createSmallMap(); }
        square** createMediumMap() { return algo->createMediumMap(); }
        int computeFoo() { return algo->computeFoo(); }
    };
}
#endif

我的 C++ algo.h 以及我想在 C# 中使用的结构

#ifdef WANTDLLEXP
#define DLL _declspec(dllexport)
#define EXTERNC extern "C"
#else
#define DLL
#define EXTERNC
#endif

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <vector>

using namespace std;

struct square {
    // 0: Mountain, 1: Plain, 2: Desert
    int type;
    // 0: No additionnal ressource, 1: Additionnal Iron, 2: Additionnal Food
    int bonus;
    // 0: free, 1: checked, 2: frozen
    int state;
};

class DLL Algo {
    public:
        Algo() {}
        ~Algo() {}
        square** createSmallMap();
        square** createMediumMap();
        int computeFoo();
};

你知道我错在哪里吗?

最佳答案

如果我很了解您,您正在寻找一种在 C# 代码中使用非托管库(如 cpp/c 库)的方法。如果是,那么您应该阅读有关编码的内容,例如。 here , here ,或here .

有关在 C# 应用程序中包含非托管代码的基础知识可以在 MSDN 上找到。 ,或MSDN Magazine .

希望有帮助。

关于c# - 包装 C 结构以在 WPF 应用程序中进行访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14085821/

相关文章:

c# - 使用 Postman 登录 Angular ASP.NET CORE 应用程序

c++ - 使用 bind 或 lambda 将 NULL 函数指针传递给类构造函数

wpf - 在 WPF 中自动调整 ReportViewer 的大小?

c# - 如何使JSON.NET忽略对象关系?

c# - Autofac 函数解析

c++ - B+树节点实现

c++ - 读取 .part 文件并将它们全部连接起来

c# - 如何在此模型中应用 MVVM 模式?

wpf - 多个绑定(bind)到 IsEnabled

c# - 界面在左侧