我想从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
但是得到了类似的错误。
我检查了几个引用,但没有一个引用这个问题。
有人可以帮忙吗?
答案 0 :(得分:2)
您已在没有访问修饰符的enum
内声明class
。默认情况下,它是private
。
您的方法是public
,但是调用该方法的任何内容都无法访问enum
,因此该结构无法正常工作。因此错误。
只需将public
修饰符添加到enum
,即可解决该错误。将enum
移出课堂也可能有意义,但这取决于你。