2010-01-23 27 views
7

Yerel bir işlev var:Var args alan bir işlev için uygun PInvoke imzası nedir?

int sqlite3_config(int, ...); 

Bu işleve PInvoke yapmak istiyorum. Şu anda bu bildirimi aldım:

[DllImport("sqlite3", EntryPoint = "sqlite3_config")] 
public static extern Result Config (ConfigOption option); 

(Sonuç ve ConfigOption, enum Result : int { ... } formunun enumlarıdır.) Xzx25

Aslında bu işlevin tek parametre sürümü ile ilgileniyorum ve diğerlerine gerek yok args. Bu doğru mu?

İki argüman formunu nasıl ilan edeceğinizi merak ediyorum (belki 2 IntPtr?).

+0

Başlığı ** Değişken bir işlev için uygun PInvoke imzası nedir? ** Daha fazla Google dostu olur. – ChaosPandion

+1

Tüm kariyerimi programlama aşamasındayım ve hala ** kelimesini hatırlamıyorum ** :-) –

+1

Bu bilgisayar bilimcileri ve garip isimleri! Görünüşe göre, aritlik, ** bir fonksiyonun alabileceği argüman sayısıdır **. – ChaosPandion

cevap

8

Sen (belgelenmemiş) __arglist anahtar kelime kullanmanız gerekir Bart # bir nice blog about it.

Örnek

class Program 
{ 
    [DllImport("user32.dll")] 
    static extern int wsprintf([Out] StringBuilder lpOut, string lpFmt, __arglist); 

    static void Main(String[] args) 
    { 
     var sb = new StringBuilder(); 
     wsprintf(sb, "%s %s %s", __arglist("1", "2", "3")); 
     Console.Write(sb.ToString()); 
    }  
} 

vararg yöntemlerini PInvoking standart bir yolu olduğunu vardı, çoğu çözümler kaydırılır çeşitli yöntemlerde örneğin

[DllImport("MyDll", CallingConvention=CallingConvention.Cdecl)] 
static extern var MyVarArgMethods1(String fmt, 
    String arg1); 

[DllImport("MyDll", CallingConvention=CallingConvention.Cdecl)] 
static extern var MyVarArgMethods2(String fmt, 
    String arg1, String arg2); 
+0

Bunu daha önce okudum. Neden belgelenmiyor? – ChaosPandion

+0

muhtemelen ECMA sunumu için son tarihi özlüyor ve şimdi MS, bu anahtar kelimeye, sepc'in parçası olana kadar taahhütte bulunmayacak. –

+0

Bu mantıklı. Ben de yardım edemiyorum ama niçin 'arglist' yerine' __arglist' kullandıklarını merak ediyorum. – ChaosPandion

İlgili konular