如何将枚举作为C#中的参数传递给C函数

时间:2015-10-23 19:54:07

标签: c# enums

我想从C#调用C函数。我为C#制作了以下原型:

XBaseNamespace.cs
-----------------
using System;
using System.Runtime.InteropServices;

namespace XBaseNamespace.SecondNamespace
{
    class XBaseFunctions
    {
        enum DSM_DIRECTION { FORWARD, BACKWARD };

        [DllImport("W:\\Dropbox\\DSI (His)\\Windows Apps\\Debug\\DsiLibrary_CSharp.dll", CharSet = CharSet.Ansi)]
        public static extern int XBaseDefineFile(int fileNumber, int fileSize, int wordsPerRecord, string fileType, DSM_DIRECTION fileDirection, out int pCurrentRecord);
    }
}

Program.cs
----------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

//  Bring in XBASE linkage
using XBaseNamespace.SecondNamespace;

namespace Call_C
{
    class Program
    {
        static void Main(string[] args)
        {
            int currentRecord;
            XBaseFunctions.XBaseDefineFile(2500, 32767, 80, "L", XBaseFunctions.DSM_DIRECTION.FORWARD, out currentRecord);
        }
    }
}

我得到的错误是:

1>W:\Dropbox\DSI (His)\Windows Apps\Testing\C_sharp\Call_C\XBaseNamespace.cs(25,34,25,49): error CS0051: Inconsistent accessibility: parameter type 'XBaseFunctions.DSM_DIRECTION' is less accessible than method 'XBaseFunctions.XBaseDefineFile(int, int, int, string, XBaseFunctions.DSM_DIRECTION, out int)'

所以我尝试使用

XBaseNamespace.SecondNamespace.XBaseFunctions.DSM_DIRECTION.FORWARD

但是得到了类似的错误。

我检查了几个引用,但没有一个引用这个问题。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

您已在没有访问修饰符的enum内声明class。默认情况下,它是private

您的方法是public,但是调用该方法的任何内容都无法访问enum,因此该结构无法正常工作。因此错误。

只需将public修饰符添加到enum,即可解决该错误。将enum移出课堂也可能有意义,但这取决于你。