gpt4 book ai didi

c++ - 问题 - TCHAR 作为 LPARAM 到属于另一个进程/线程的窗口

转载 作者:可可西里 更新时间:2023-11-01 11:10:03 27 4
gpt4 key购买 nike

所以我正在通过 C 书示例在 Windows 上玩/实现 tomyown,并且有一些关于 dll 注入(inject)部分的东西让我感到困惑,我无法解决它。

我创建了一个属于另一个线程/进程的对话框,我试图向它发送 TCHAR 变量,以便它可以在某些函数中使用该 var(函数和 tchar 都在同一个 dll 文件中)

因此,当创建对话框并在另一个线程中正常运行时,我会向它发送一条消息。

首先我声明了tchar

TCHAR finalpath[MAX_PATH];

然后我只是用信息填充它(我在 dll 线程中执行此操作,而不是在对话框的线程中,让我还提到我必须在 dll 线程中执行此操作,因为那是填充所需 tchar 的唯一方法(我我需要获取 dll 工作目录并将其填入 tchar))

因此,当我在我的 tchar 中获得此信息时,我正在尝试向对话框发送消息并将 tchar 用作 LPARAM(wparam 是 hwnd btw)

SendMessage(hWndDIPS, WM_APP, (WPARAM) lista, (LPARAM)finalpath); 

然后我在另一个线程对话过程循环中做基本的功课...

INT_PTR WINAPI Dlg_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {

switch (uMsg) {
chHANDLE_DLGMSG(hWnd, WM_CLOSE, Dlg_OnClose);

case WM_APP:


SaveListViewItemPositions((HWND) wParam, (TCHAR)lParam);
break;
}

return(FALSE);
}

应该接收参数的函数(此函数驻留在共享dll中,并由您在上面看到的过程调用,定义如下..

void SaveListViewItemPositions(HWND hWndLV, TCHAR sejv[]) {...

我从这里得到的编译器错误是

Error 7 error C2664: 'SaveListViewItemPositions' : cannot convert parameter 2 from 'TCHAR' to 'TCHAR []'

所以我不知道为什么会这样。如果 tchar 是数组,那么我需要在参数中使用它并添加 [],因为这就是数组在参数中的使用方式(更不用说如果我不这样做它会给我更多的错误并且我无论如何都不能在函数中使用参数)

那么为什么它没有转换呢?

如果有其他解决方案可以使此对话框接收 tchar var,请说明。

谢谢

最佳答案

即使您修复了类型声明并将 LPARAM 正确转换为 TCHAR*,您的代码仍将是不正确的。您传递给该窗口过程的“参数”是一个指针,并且与任何指针一样,仅在进程地址空间内有效。接收窗口必须使用 ReadProcessMemory并将字符串从您的进程复制到它自己的进程中。当然,这意味着接收进程知道您的进程 ID,并且具有能够从您的内存中读取的适当权限。而且您还需要传入字符串的长度,因为 ReadProcessMemory 无法猜测 NULL 终止符在哪里(尽管我认为最大长度为 MAX_PATH,这不是一个严重的问题)。

所以你是对的,这是一个令人头疼的问题,而且在未来更是如此。特权问题可能会成为阻碍。

您可以使用多种 IPC 机制。一个简单的方法是匿名命名管道,请参阅 Anonymous Pipe Operations .共享内存是另一个,参见 Using Shared Memory in a Dynamic-Link Library . COM 也可以工作(让您“控制”的进程创建一个托管在您的进程服务器中的类的实例,然后让 COM 编码(marshal)处理完成其余工作,请参阅 Marshaling Details )。或者您可以在进程边界之间手动编码 COM 接口(interface)(请参阅 CoMarshalInterface )。

关于c++ - 问题 - TCHAR 作为 LPARAM 到属于另一个进程/线程的窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4590497/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com