- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试使用 sendmessage 将消息从我的 C++ 应用程序传递到 C#
我的c++代码是这样的
int _tmain(int argc, _TCHAR* argv[])
{
COPYDATASTRUCT cpd;
cpd.dwData = 0;
LPCWSTR strDataToSend = L"http://google.com";;
cpd.cbData = (wcslen(strDataToSend) + 1) * 2;
cpd.lpData = (PVOID)strDataToSend;
SendMessage((HWND)0x0020073C,5555,0,(LPARAM)&cpd);
return 0;
}
我尝试使用 SendMessageW,我也对句柄进行了硬编码,这是正确的我正在回拨电话但没有收到任何数据
我的C#应用程序是这样的
public struct COPYDATASTRUCT
{
public IntPtr dwData;
public int cbData;
[MarshalAs(UnmanagedType.LPStr)]
public string lpData;
}
protected override void WndProc(ref Message m)
{
// Listen for operating system messages.
switch (m.Msg)
{
// The WM_ACTIVATEAPP message occurs when the application
// becomes the active application or becomes inactive.
case 5555:
COPYDATASTRUCT mystr = new COPYDATASTRUCT();
Type mytype = mystr.GetType();
mystr = (COPYDATASTRUCT)m.GetLParam(mytype);
MessageBox.Show ( mystr.cbData.ToString());
MessageBox.Show(mystr.lpData);
break;
}
base.WndProc(ref m);
}
我的消息框空白......我尝试不使用 COPYDATASTRUCT 只有我传递的字符串 plz 任何人都可以帮助我..提前致谢
int _tmain(int argc, _TCHAR* argv[])
{
COPYDATASTRUCT cpd;
cpd.dwData = 0;
LPCWSTR strDataToSend = L"http://google.com";;
cpd.cbData = (wcslen(strDataToSend) + 1) * 2;
cpd.lpData = (PVOID)strDataToSend;
SendMessage((HWND)0x0020073C,WM_COPYDATA,0,(LPARAM)&cpd);
return 0;
}
C#代码
public struct COPYDATASTRUCT
{
public IntPtr dwData;
public int cbData;
[MarshalAs(UnmanagedType.LPStr)]
public string lpData;
}
public const int WM_COPYDATA = 0x4A;
protected override void WndProc(ref Message m)
{
// Listen for operating system messages.
switch (m.Msg)
{
// The WM_ACTIVATEAPP message occurs when the application
// becomes the active application or becomes inactive.
case WM_COPYDATA:
COPYDATASTRUCT mystr = new COPYDATASTRUCT();
Type mytype = mystr.GetType();
mystr = (COPYDATASTRUCT)m.GetLParam(mytype);
MessageBox.Show ( mystr.cbData.ToString());
MessageBox.Show(mystr.lpData);
break;
}
base.WndProc(ref m);
}
最佳答案
我稍微修改了源代码,它就可以工作了。在 C++ 代码中,我使用了这个调用
SendMessage((HWND)0x0020073C,WM_COPYDATA,0,(LPARAM)&cpd);
在 C# 应用程序中,我使用了以下内容
public const int WM_COPYDATA = 0x004A;
和COPYDATASTRUCT
是
[StructLayout(LayoutKind.Sequential)]
public struct COPYDATASTRUCT
{
public IntPtr dwData;
public int cbData;
public IntPtr lpData;
}
消息处理程序是这样修改的
case WM_COPYDATA:
COPYDATASTRUCT mystr = new COPYDATASTRUCT();
mystr = (COPYDATASTRUCT)Marshal.PtrToStructure(m.LParam, typeof(COPYDATASTRUCT));
if (mystr.cbData > 0)
{
byte[] data = new byte[mystr.cbData];
Marshal.Copy(mystr.lpData, data, 0, mystr.cbData);
Encoding unicodeStr = Encoding.Unicode;
char[] myString = unicodeStr.GetChars(data);
string returnText = new string(myString);
MessageBox.Show("Text is " + returnText);
}
break;
关于c# - SendMessage 到窗口句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10909453/
我设置了 Helm 柄和 Helm 柄。我有tiller-deploy。昨天,我可以定期运行了。但今天我收到此错误消息 Error: could not find a ready tiller pod
我以前已将分er安装到特定的 namespace 中。 我设置了一个环境变量来设置'tiller'命名空间-但我不记得该环境变量的名称-而且似乎无法通过网络搜索找到它。 这是什么 key ? 最佳答案
当我在 View 模型中使用如下界面时 class MainViewModel @ViewModelInject constructor( private val trafficImagesR
我正在尝试找到如何在某个 fragment 相关场景中定义 Hilt 的解决方案。我有以下设置: Activity 父 fragment 1 子 fragment 1 子 fragment 2 ...
Hilt 指出如果没有@Provides 注解就不能提供这个接口(interface): interface PlannedListRepository { fun getAllLists()
我的问题非常简单明了:两个注释/示例之间有什么区别: 例子一 @Singleton class MySingletonClass() {} @Module @InstallIn(FragmentCom
我是一名优秀的程序员,十分优秀!