2015-10-23 142 views
0

我想從C#調用C函數。我做了以下原型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

嘗試使用枚舉'public',默認爲'private',指定命名空間對此沒有幫助。另請注意,由於您沒有爲您的'XBaseFunctions'類指定訪問修飾符,所以默認情況下它是'internal'。 –

回答

2

您已聲明enumclass的內部沒有訪問修飾符。默認情況下,它是private

您的方法是public,但沒有任何調用該方法的人可以訪問enum,因此該結構無法工作。因此錯誤。

只需將public修飾符添加到您的enum應該照顧該錯誤。將enum移出課程也是有意義的,但這取決於你。

+0

謝謝,我將它改爲: public enum DSM_DIRECTION {FORWARD,BACKWARD}; 但給出了: 錯誤CS0117:'DSM_DIRECTION'不包含'FORWARD'的定義 – eddyq

+0

我的錯誤。這工作!謝謝 – eddyq

相關問題