Pointers VB.NET中作为Win32 API参数的指针??(在VB.NET中调整屏幕亮度)

Pointers VB.NET中作为Win32 API参数的指针??(在VB.NET中调整屏幕亮度),pointers,c#-to-vb.net,Pointers,C# To Vb.net,我需要在VB.NET中编写类似的代码,但在SetDeviceGammaRamp(Int32 hdc,void*ramp)中有一个指针参数。在VB6中,可以使用VarPtr()四处走动,但不再支持它。在VB.NET中,每个代码转换器都不能与指针一起工作,并且声明VB.NET中没有指针这样的东西,所以我想知道是否有一种方法可以绕过它。另外,我应该如何声明函数 顺便说一句,屏幕亮度的调节是在、、和甚至中解决的 C#代码: 使用系统; 使用系统文本; 使用系统图; 使用System.Runtime.In

我需要在VB.NET中编写类似的代码,但在
SetDeviceGammaRamp(Int32 hdc,void*ramp)
中有一个指针参数。在VB6中,可以使用
VarPtr()
四处走动,但不再支持它。在VB.NET中,每个代码转换器都不能与指针一起工作,并且声明VB.NET中没有指针这样的东西,所以我想知道是否有一种方法可以绕过它。另外,我应该如何声明函数

顺便说一句,屏幕亮度的调节是在、、和甚至中解决的

C#代码:

使用系统;
使用系统文本;
使用系统图;
使用System.Runtime.InteropServices;
名称空间亮度
{
/// 
///用于操纵屏幕亮度的类
/// 
公共静态类亮度
{
[DllImport(“gdi32.dll”)]
专用不安全静态外部布尔设置设备Gammaramp(Int32 hdc,void*ramp);
私有静态bool initialized=false;
专用静态Int32 hdc;
私有静态void InitializeClass()
{
如果(已初始化)
返回;
//获取屏幕的硬件设备上下文,我们可以这样做
//这是通过获取null的图形对象(IntPtr.Zero)实现的
//然后获取HDC并将其转换为Int32。
hdc=Graphics.FromHwnd(IntPtr.Zero).GetHdc().ToInt32();
初始化=真;
}
公共静态不安全光亮度(短亮度)
{
初始化类();
如果(亮度>255)
亮度=255;
如果(亮度<0)
亮度=0;
short*gArray=stackalloc short[3*256];
short*idx=gArray;
对于(int j=0;j<3;j++)
{
对于(int i=0;i<256;i++)
{
int arrayVal=i*(亮度+128);
如果(arrayVal>65535)
arrayVal=65535;
*idx=(短)arrayVal;
idx++;
}
}
//出于某种原因,它总是返回false?
bool retVal=SetDeviceGammaRamp(hdc,gArray);
//通过stackalloc分配的内存将自动释放
//由CLR提供。
返回返回;
}
}
}
为什么代码转换器不能在VB.NET中使用指针(没有名为
Pointer(Of t)
)的类):

_
私有共享函数SetDeviceGammaRamp(hdc为Int32,ramp为指针(属于System.Void))为布尔值
端函数
Dim gArray作为指针(短)=stackalloc
Dim idx作为指针(短)=gArray
不要认为这是必要的,因为
hdc=Graphics.FromHwnd(IntPtr.Zero).GetHdc().ToInt32()
可以做到这一点

_
私有共享函数GetDeviceGammaRamp(hdc作为IntPtr,lpRamp作为IntPtr)作为布尔值
端函数

指针(System.Void)
IntPtr
,你甚至不需要知道,因为你只需声明一个
3*256
short
s数组,并将函数声明为
byval hdc为IntPtr,ramp为short()
@GSerg Wait,什么??是不是
IntPtr
指针(整数的)
?,我的第一条评论去了哪里?
指针(System.Void的)
IntPtr
。你甚至不需要知道,因为你只需声明一个
3*256
short的数组,并将函数声明为
byval hdc为IntPtr,ramp为short()
@GSerg等等,什么??是不是
IntPtr
指针(整数)
?我的第一条评论去了哪里?