2010-03-26 4 views
2

Avoir un type dans les fichiers d'en-tête avec lesquels je travaille appelé VTVOID c'est le type d'un élément struct et un certain nombre de paramètres.
Dans le fichier d'en-tête définissant les types est la ligneUne autre question C# void

#define VTVOID void 

Je lis dans une autre discussion, les cartes vides à System.Void mais quand je branche que dans le code C# Je reçois l'erreur

« Système. Void ne peut pas être utilisé en C# - utilisez typeof (void) pour obtenir l'objet vide . "

Alors, quel type dois-je brancher?
Jim

+3

Euh, est-ce que 'typeof (void)' ne fonctionne pas? –

+0

Vous dites que #define VTVOID void fonctionne, alors qu'est-ce que vous essayez de changer? –

+0

pourquoi ne pas utiliser System.Object? ;) –

Répondre

2

utilisez void Foo() {} au lieu de System.Void Foo() {} si le vlaue void de retour est destiné.

utilisez octet [] au lieu de void * si vous avez besoin d'un tableau de données.

+0

VTVOID est utilisé comme type d'élément struct comme suit: [StrucLayout (LayoutKind.Sequential, Pack = 4)] structure publique DAFILESPEC { public VTDWORD dwSpecType; public VTVOID pSpec; Public IntPtr hThis; }; Et en tant que type de paramètre [DllImport ("sccda.dll")] public static extern uint DADeInit (VTVOID param0); Ci-dessus la sortie de PInvoke Wizard 2.0 et je sous-insère dans les types compatibles C#. par exemple. VTDWORD est un uint sur une machine 32 bits. Autres commentaires: #define VTVOID void est le fichier d'en-tête C pas C# Est-ce que System.Type VTV = typeof (void) n'a pas pu comprendre comment l'utiliser. –

+0

Ceci est étrange, vous ne pouvez pas déclarer une variable comme nulle. Du nom de la variable "pSpec" je devinerais du préfixe que c'est un ** pointeur ** à vide. La méthode qui a VTVOID comme seul argument Je suppose que cette méthode n'a pas de paramètres. – codymanix

+0

comme vous pouvez le voir ici la méthode DADeInit n'a pas de paramètres: http://download.oracle.com/docs/cd/E14154_01/sxguide/html/c04_dataaccess003.htm – codymanix