Show/Hide Toolbars

XSharp

 

-vo6 选项指示编译器将类型化函数指针解析为 PTR。

语法

-vo6[+|-]

参数

+ | - 指定 + 或 -vo6,可指示编译器将 Visual Objects 中键入函数指针的指针解析为 PTR。

备注

X# 不支持类型化函数指针。除非将类型更改为 PTR 或 IntPtr,否则声明了类型化函数指针的现有 Visual Objects 代码将无法在 X# 中编译。

 

如果启用了该选项,但无法解析指针类型,编译器将尝试查找与指针类型(不含 "PTR")同名的函数。如果找到,编译器将把该类型解析为 PTR。这样,现有的 Visual Objects 代码无需修改即可编译,至少在变量声明方面是这样。

 

根据指针指向的函数类型,指针类型可用作 CCallNative()、PCallNative() 或 CallManaged() 的参数。

 

要在 Visual Studio 开发环境中设置该编译器选项,请执行以下操作

 

1.打开项目的 "属性"页面

2.点击 Dialect 选项卡

3.更改值

4.查看属性页

示例

以下代码在 Visual Objects 中有效,但在 X# 中无法编译,除非使用 -vo6。

FUNCTION foo( x AS INT ) AS VOID
RETURN
 
GLOBAL pFoo AS foo PTR
 

使用 /vo6 的效果与改写 GLOBAL 声明的效果相同:

GLOBAL pFoo AS PTR

 

 

Using -vo6 has the same effect as if the GLOBAL declaration were rewritten as:

 

 

GLOBAL pFoo AS PTR

 

Note that PTR does not have the same semantics as typed function pointers in Visual Objects. However, typed function pointers are primarily used as arguments to CALL(), CCALL() and PCALL() in Visual Objects, which are not supported in X#. They have been replaced with CCallNative(), PCallNative() and CallManaged(), which accept IntPtr arguments. The same end result (invoking a function indirectly through a pointer) is therefore possible in X# without typed function pointers.