2010-03-26 57 views
2

在我正在使用的头文件中有一个类型叫做VTVOID它是一个struct元素的类型和一些参数。
在头文件中定义类型是行另一个无效的C#问题

#define VTVOID void 

我在另外一个讨论的空白映射到System.Void但是当我插上读取到C#代码中,我得到的错误

“系统。在C#中不能使用void - 使用typeof(void)来获得void 对象。“

那么我插入什么类型?
Jim

+3

呃,'typeof(void)'不工作吗? – 2010-03-26 16:31:51

+0

你是说#define VTVOID无效,所以你想改变什么? – 2010-03-26 16:31:53

+0

为什么不使用System.Object? ;) – 2010-03-26 16:31:55

回答

2

如果返回vlaue为void,则使用void Foo(){}而不是System.Void Foo(){}。

如果您需要有一组数据,请使用byte []而不是void *。

+0

VTVOID被用作结构元素类型如下: [StrucLayout(LayoutKind.Sequential,Pack = 4)] public struct DAFILESPEC { public VTDWORD dwSpecType; public VTVOID pSpec; Public IntPtr hThis; }; 并且作为参数类型 [DllImport(“sccda.dll”)] public static extern uint DADeInit(VTVOID param0); 从PInvoke向导2.0的输出以上,我在C#兼容类型subtle。例如VTDWORD是32位机器上的一个uint。 其他评论: #define VTVOID void是C头文件而不是C# System.Type VTV = typeof(void)无法弄清楚如何使用它。 – 2010-03-26 19:48:32

+0

这很奇怪,你不能声明一个变量为void。从变量“pSpec”的名称,我会从前缀猜测,它是一个**指针**无效。只有VTVOID作为参数的方法我猜这个方法没有参数。 – codymanix 2010-03-29 08:28:50

+0

,您可以在此处看到方法DADeInit没有参数:http://download.oracle.com/docs/cd/E14154_01/sxguide/html/c04_dataaccess003.htm – codymanix 2010-03-29 08:30:13