将C结构包装在WPF应用程序中

Wrap a C struct for access in WPF application

本文关键字:WPF 应用程序 包装 结构      更新时间:2023-10-16

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

当我尝试"我的方式"时,我在编译时会收到一条错误消息:"'wrapper.wrapperalgo.cereatemediummap()'由于其保护级别而无法访问"

我的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#

中使用的结构的C algo.h
#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库)的方法。如果是,那么您应该阅读有关套的信息,for ex。在这里,这里或这里。

可以在MSDN或MSDN杂志上找到有关在C#应用中加入非管理代码的基础知识。

希望它有帮助。