C# 托管到非托管代码,DWORD值到LPVOID

C# 托管到非托管代码,DWORD值到LPVOID,c#,multithreading,visual-studio-2008,C#,Multithreading,Visual Studio 2008,我有一个管理进程,它将地址值作为DWORD传递。我希望在线程函数中使用此DWORD值,该函数要求参数作为LPVOID传递,如何传递该值而不使其变得混乱?这不是真正的代码,但我记得它的大部分 void incoming(DWORD addr) { CreateThread(...threadfunc, addr...); } DWORD WINAPI threadfunc(LPVOID param) { DWORD _addr = param } 问题是接收到的threadfunc

我有一个管理进程,它将地址值作为DWORD传递。我希望在线程函数中使用此DWORD值,该函数要求参数作为LPVOID传递,如何传递该值而不使其变得混乱?这不是真正的代码,但我记得它的大部分

void incoming(DWORD addr)
{
    CreateThread(...threadfunc, addr...);
}

DWORD WINAPI threadfunc(LPVOID param)
{
  DWORD _addr = param
}
问题是接收到的threadfunc addr值是乱码,所以当我使用ReadProcessMemory()时,例如它现在是垃圾


谢谢。

您需要托管进程将指针传递到传入的
as。这是向非托管API传递指针值的标准方法

IntPtr类型可由 支持指针的语言,以及 作为参考数据的常用方法 在做和不做的语言之间 支持指针


如前所述,这将在Win64上失败-您确实需要将
传入的
参数更改为
INT\u PTR

类型,这是指向什么的
addr
指针?这是在64位系统上询问问题。64位地址值不适合DWORD。你不能阻止它被弄错。史蒂夫,你能回答这个问题吗。好的,我将地址值硬编码到线程中。如果排除所有线程代码并返回预期值,则此地址有效。但是当我以线程的形式运行它时(在线程中使用硬编码地址),它就会返回垃圾!为什么内存地址变得无效?线程是在看不同的地址空间吗?我确实解决了这个问题,Steve,我使用了错误的CreateThread方法,这就是为什么我得到了垃圾。指针是正确的,令人烦恼的是线程工作了。谢谢你的帮助。