2013-12-18 50 views
0

我打電話給一個C導出函數,它不讓我使用參數!如何將我的__arglist參數發送到C#中的另一個函數?

代碼:

public static void CallIt1(string Format, __arglist) 
    { 
     //Processing Data 

    } 

    public static void CallIt2(__arglist) 
    { 
     CallIt1("myform", ?); 

    } 

我需要把所有被髮送到CallIt2到另一個功能CallIt1參數。
C#不允許我聲明一個變量__arglist。
任何想法如何做CallIt1("myform", Call2ARGS);

+0

使用'params對象[] args'取代'__arglist' 。 –

+1

@ AlessandroD'Andria我在調用C導出函數,不能使用參數 –

+1

這是字面代碼嗎?發佈_exact_導入語句,也許還有確切的'C'。現在我讀它,它應該簡單地是'int __arglist'。 –

回答

0

因爲你正在做的非託管和託管環境之間封送你應該聲明你的功能在C#這樣的:

[DllImport(my_C_dll, CallingConvention=CallingConvention.Cdecl)] 
static extern void print_string_array([In] string[] str_array, IntPtr length); 

經上所記,你的C代碼似乎使用cdecl調用約定。所以你可能需要進行C#聲明匹配。我懷疑這是你面臨的主要問題。 請儘量看看這個tutorial第一

+0

@Mgetz我認爲如果可能的話,OP會提供更多的細節 –

+1

謝謝,但這不是我的問題,我只想將__arglist從一個funcion發送到另一個C#內部,這與C++無關這個問題的一部分。 –

+0

是的,即使你使用C#讓C/C++函數在它們之間進行通信,你仍然需要編組 –

2

如果你想C#(我不清楚)內部調用可以嘗試:

public static void CallIt1(string Format, ArgIterator iterator) 
{ 
    //Processing Data 
} 

public static void CallIt2(__arglist) 
{ 
    CallIt1("myform", new ArgIterator(__arglist)); 
} 
+0

謝謝,有沒有辦法將ArgIterator轉換回__arglist? –

相關問題