草庐IT

intptr_t

全部标签

C# Process.MainWindowHandle 总是返回 IntPtr 零

这是我的代码:using(Processgame=Process.Start(newProcessStartInfo(){FileName="DatabaseCheck.exe",RedirectStandardOutput=true,CreateNoWindow=true,UseShellExecute=false})){lblLoad.Text="Loading";intSwitch=0;while(game.MainWindowHandle==IntPtr.Zero){Switch++;if(Switch%1000==0){lblLoad.Text+=".";if(lblLoad

c# - 在 C# 中赢得 api。从 IntPtr 获取高位和低位字

我正在尝试在C#中处理WM_MOUSEMOVE消息。从IntPtr类型的lParam获取X和Y坐标的正确方法是什么? 最佳答案 尝试:(请注意,这是初始版本,阅读下面的最终版本)IntPtrxy=value;intx=unchecked((short)xy);inty=unchecked((short)((uint)xy>>16));通常不需要unchecked(因为“默认”c#项目未选中)考虑这些是所用宏的定义:#defineLOWORD(l)((WORD)(((DWORD_PTR)(l))&0xffff))#defineHIWO

c# - 使用 : HandleRef or IntPtr (newer source code from Microsoft no longer uses HandleRef) 哪个更好/更安全

例如,在旧的.NETFramework2.0源代码(Windows窗体、VisualStudio2005-Whidbey)中,GetClientRect函数是使用HandleRef定义的:[DllImport(ExternDll.User32,ExactSpelling=true,CharSet=CharSet.Auto)]publicstaticexternboolGetClientRect(HandleRefhWnd,[In,Out]refNativeMethods.RECTrect);在新的WindowsAPI代码包(来自Microsoft,2009/2010)中,使用IntPt

c# - 我可以使用 SafeHandle 而不是 IntPtr 吗?

我在网上广泛搜索,但没有找到很好的解释。我的问题很简单。我有一个DLL,它有一个名为Initialize的函数,其中一个参数是一个指针,它将接收一个句柄以供后续调用使用。另一个参数是一个字符串,为了完整起见,我将列出它。我使用的签名是(以其简单的形式):[DllImport(MyDll)]staticexternboolInitialize([In]stringname,outIntPtrhandle);DLL本身中的签名写为:Initialize(LPTSTRname,HANDLEhandle)带有注释“HANDLE:指向将接收句柄的位置的指针”。而后续调用的形式是[DllImpor

c++ - atoi() 相当于 intptr_t/uintptr_t

C++(C++11,如果它有所不同)中是否有一个函数可以将字符串转换为uintptr_t或intptr_t?我总是可以使用atoll()并在之后转换它,但最好是获得一个函数,该函数对32位机器执行32位操作,对64位机器执行64位操作。char*c="1234567";uintptr_tptr=atoptr(c);//afunctionthatdoesthis; 最佳答案 这是C++中IMO令人惊讶的差距。虽然stringstream完成了这项工作,但对于这样一个简单的任务来说,它是一个相当繁重的工具。相反,您可以编写一个内联函数,

c++ - 作用域和线程局部变量如何在(V8 的)C++ 中工作?

我对V8的作用域如何工作很感兴趣。堆栈上的作用域对象如何找到堆栈更上层的其他作用域对象和上下文?深入研究HandleScopes的工作原理后,我发现它们依赖于线程局部变量。这让我想知道这些在C++中是如何工作的,我已经找到了实现,但仍然觉得我不明白发生了什么。api.cc--HandleScope查找当前IsolateHandleScope::HandleScope(){i::Isolate*isolate=i::Isolate::Current();API_ENTRY_CHECK(isolate,"HandleScope::HandleScope");v8::Implementati

c++ - 理解 void* 对 intptr_t 和 uintptr_t

这是我正在测试的代码:intvalue=0;void*addyvoid=static_cast(&value);//C++-stylecast.它工作得很好,但我可以使用uintptr_t/intptr_t。但是正如人们所说的那样,它们并不适合用来指点here因为它们太大了。那么,这是真的吗?但是,如果是,使用void*保存指针会更好,但是会不会丢失数据? 最佳答案 intptr_t和uintptr_t的目的是,在某些应用程序中,您实际上确实需要对指针值进行某种数值计算,可能是通过翻转各个位,也许是XORing它们等。在这些情况下,

c# - 如何将 IntPtr 传递给非托管 C++ CLR 托管代码的方法?

我正在使用本教程作为我在32位非托管DLL中的代码的基础https://code.msdn.microsoft.com/CppHostCLR-e6581ee0假设我想调用TestIntPtrpublicclassIntPtrTester{publicstaticvoidTestIntPtr(IntPtrp){MessageBox.Show("TestIntPtrMethodwasCalled");}publicstaticvoidTestInt(intp){MessageBox.Show("TestIntMethodwasCalled");}}如果在C++端它代表句柄,我如何传递Int

c++ - 为什么 uintptr_t 和 intptr_t 是 C(和 C++)标准中的可选类型?

C99(及更高版本的标准)标准要求某些类型在header中可用.对于精确宽度,例如int8_t,int16_t等等...,它们是可选的,并且在标准中是有动机的。但对于uintptr_t和intptr_t类型,它们也是可选的,但我不认为它们是可选的而不是必需的。 最佳答案 在某些平台上,指针类型的大小比任何整型都大得多。我相信此类平台的一个示例是IBMAS/400,其虚拟指令集将所有指针定义为128位。此类平台的最新示例是Elbrus。它使用128位指针,这些指针是硬件描述符而不是普通地址。

c++ - 将 intptr_t 传递给需要 int 的函数是否安全?

更具体地说,如果我有以下函数指针类型:typedefvoid(*callback_type)(intptr_tcontext,void*buffer,size_tcount);我可以安全且没有“未定义的行为”吗:callback_typefunc_ptr=(callback_type)write;intptr_tcontext=fd;func_ptr(context,some_buffer,buffer_size);?其中write()是系统调用(编辑:具有签名ssize_twrite(intfd,constvoid*buf,size_tcount);,因此需要一个int作为第一个参数