C# 本机Win32api RichEdit控件及其iriceditole接口存在问题

C# 本机Win32api RichEdit控件及其iriceditole接口存在问题,c#,com,com-interop,ole,C#,Com,Com Interop,Ole,作为为一个Interwoven工作站点对话框编写自定义命令(COM Visible dll和实现Interwoven命令接口的类)的一部分,我需要从RichEdit文本框中提取信息 现有对话框的唯一连接是其HWND句柄;看似微不足道的任务,但我被卡住了: 使用标准win32 api函数(如GetDlgItemText)返回空字符串 在使用Spy++之后,我注意到对话框获得了IRichEditOle接口,似乎将字符串封装到OLE对象中 以下是我试图做的: IRichEditOle richEd

作为为一个Interwoven工作站点对话框编写自定义命令(COM Visible dll和实现Interwoven命令接口的类)的一部分,我需要从RichEdit文本框中提取信息

现有对话框的唯一连接是其HWND句柄;看似微不足道的任务,但我被卡住了:

  • 使用标准win32 api函数(如GetDlgItemText)返回空字符串
在使用Spy++之后,我注意到对话框获得了
IRichEditOle
接口,似乎将字符串封装到OLE对象中

以下是我试图做的:

IRichEditOle richEditOleObj = null; 
IntPtr ppv = IntPtr.Zero; 
Guid guid = new Guid("00020D00-0000-0000-c000-000000000046"); 
Marshal.QueryInterface(pRichEdit, ref guid, out ppv); 
richEditOleObj = (IRichEditOle)Marshal.GetTypedObjectForIUnknown(ppv,typeof(IRichEditOle));
根据接口的
GetObjectCount()
方法判断,文本框中正好有一个对象,很可能就是我需要提取的字符串。我使用了
GetObject()
方法,通过
QueryInterface
获得了
IOleObject
接口:

if (richEditOleObj.GetObject(0, reObject, GetObjectOptions.REO_GETOBJ_ALL_INTERFACES) == 0) //S_OK
{ 
    IntPtr oleObjPpv = IntPtr.Zero;
    try
    { 
        IOleObject oleObject = null; 
        Guid objGuid = new Guid("00000112-0000-0000-C000-000000000046"); 
        Marshal.QueryInterface(reObject.poleobj, ref objGuid, out oleObjPpv);
        oleObject = (IOleObject)Marshal.GetTypedObjectForIUnknown(oleObjPpv, typeof(IOleObject)); 
为了否定其他可能性,我尝试将
iriceditole
的空间查询到
ITextDocument
,但这也返回了空字符串

我试图发送
EM\u STREAMOUT
消息并读取回调返回的缓冲区-返回的空缓冲区

在这一点上我被卡住了。谷歌搜索没有多大帮助——找不到任何与我的问题相关的东西——似乎网上绝大多数关于
IRichEditOle
和RichEdit的例子都是围绕着将位图插入RichEdit控件展开的

主要问题-我无法找到从
IOleObject
接口提取所需信息的方法,也没有找到任何与从对象提取数据相关的示例

现在,由于我只知道COM和OLE的基本知识,我想我错过了一些重要的东西


如果您有任何想法、建议或意见,我将不胜感激。

我找到了拼图中缺失的部分。也许我所做的会帮助其他有类似问题的人

调用
iriceditole::GetObject
后,我收到了
REOBJECT
结构。通过使用结构的clsid字段,我通过注册表找到了定义所需接口的dll


使用显式转换(这是C#;因此相当于使用QueryInterface)从
IOleObject
到所需的接口,我实现了我所需要的-访问存储在该
IOleObject

中的数据为什么不使用RichEditBox类?此控件是否属于其他进程?是。Interwoven Worksite是客户机-服务器应用程序,我正在为一个客户机对话框开发扩展;我与工作站点客户端的唯一连接是通过其COM api获得的HWND句柄。