- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试通过 COM 调用在 C# 中使用 IFileDialogCustomize 接口(interface)。我调用 GetEditBoxText(id, buffer) 定义为:
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
HRESULT GetEditBoxText([In] int dwIDCtl, [Out] IntPtr ppszText);
我从 https://msdn.microsoft.com/en-us/library/windows/desktop/bb775908(v=vs.85).aspx 得到的
我写的代码是:
IntPtr buffer = Marshal.AllocCoTaskMem(sizeof(int));
string textboxString;
var customizeDialog = GetFileDialog() as IFileDialogCustomize;
if (customizeDialog != null)
{
HRESULT result = customizeDialog.GetEditBoxText(id, buffer);
if (result != HRESULT.S_OK)
{
throw new Exception("Couldn't parse string from textbox");
}
}
textboxString = Marshal.PtrToStringUni(buffer);
Marshal.FreeCoTaskMem(buffer);
return textboxString;
字符串总是返回奇数字符,例如벰∔。
我刚开始使用 Com 接口(interface)并且从未进行过 C++ 编程,所以我在这里有点迷路。为什么我没有从此处的文本框中获取实际字符串?
最佳答案
我想通了。它结合了 Jacob 所说的和更改 Com 调用的签名。而不是
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
void GetEditBoxText([In] int dwIDCtl, [Out] IntPtr ppszText);
我需要签名:
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
HRESULT GetEditBoxText([In] int dwIDCtl, out IntPtr ppszText);
这实际上正确地传递了 IntPtr 并且我能够使用
获取字符串 Marshal.PtrToStringUni(buffer);
关于c# - 如何在 C# 中从 IFileDialogCustomize GetEditBoxText() 获取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35786491/
我可以使用 FileSaveDialog1.Dialog.QueryInterface 创建一个按钮,如下所示。如何设置和处理 OnPushButton 单击事件以便我可以响应按钮单击? proced
WCHAR wcText[100] = {0}; WCHAR *pText = wcText; WCHAR **ppText = &pText; HRESULT hr = pDialogCustomi
我正在寻找一个公共(public)文件打开对话框,其中“打开”按钮上有“打开”和“打开只读”选项。 我已经按照...中的示例 Add a IFileDialogCustomize PushButton
我正在尝试通过 COM 调用在 C# 中使用 IFileDialogCustomize 接口(interface)。我调用 GetEditBoxText(id, buffer) 定义为: [M
我是一名优秀的程序员,十分优秀!