标签: ole

为什么Win32 OleGetClipboard()函数会返回CLIPBRD_E_CANT_OPEN?

在什么情况下Win32 API函数OleGetClipboard()会失败并返回CLIPBRD_E_CANT_OPEN

更多背景:我正在协助修复Firefox错误.详细信息:

bug 444800 - 无法以无损格式从剪贴板检索图像数据

在我帮助编写的自动化测试中,我们看到OleGetClipboard()有时会失败并返回CLIPBRD_E_CANT_OPEN.这是意料之外的,用于从Windows剪贴板中提取图像数据的Firefox代码取决于该调用是否成功.

c++ windows winapi ole

3
推荐指数
1
解决办法
1770
查看次数

Excel 无法插入超过 255 个字符?

我正在使用 OLE DB 驱动程序在 Excel 工作表中插入超过 255 个字符,但出现错误:

异常详细信息:System.Data.OleDb.OleDbException:该字段太小,无法接受您尝试添加的数据量。尝试插入或粘贴较少的数据。

这个线程看来,这是一个 Excel 限制。甚至微软网站在这里似乎也是这么说的。

那么这是否意味着我不能以编程方式,但我可以手动?因为我在 Excel 中手动输入时可以输入超过 255 个字符。那么它是Microsoft.ACE.OLEDB.12.0(AccessDatabaseEngine.exe) 驱动程序限制吗?

excel ole export-to-excel

3
推荐指数
1
解决办法
2万
查看次数

从OleVariant获取IStream

我正在使用Delphi和WinHTTP来执行HTTP请求以从Internet下载一些文件,我可以执行请求但我不知道如何从返回的OleVariant获取IStream ResponseStream.我花了很多时间谷歌搜索,但我无法弄清楚如何做到这一点.这是我尝试过的:

var
  req: IWinHTTPRequest;
  instream: IStream;
begin
  req := CoWinHTTPRequest.Create;

  req.Open('GET', 'http://google.com', false);
  req.Send('');

  if req.Status <> 200 then
  begin
    ShowMessage('failure'#10 + req.StatusText);

    FreeAndNil(req);

    Application.Terminate;
  end;

  instream := req.ResponseStream as IStream;

  ShowMessage('success');

  FreeAndNil(instream);
  FreeAndNil(req);

end;
Run Code Online (Sandbox Code Playgroud)

但是我得到了错误[DCC Error] main.pas(45): E2015 Operator not applicable to this operand type(第45行instream := req.ResponseStream as IStream;).

如何从OleVariant中吓跑IStream?

delphi ole istream winhttprequest delphi-2010

3
推荐指数
1
解决办法
1885
查看次数

使用 WININET API 处理 GZIP 压缩

我的服务器向我发送了一个使用 GZIP 压缩进行压缩的 JSON 数据流。

当我在普通 IE 浏览器上请求这些数据时,我会得到数据,当我提到要打开的应用程序时,浏览器会自动解压缩该数据流并显示我的 JSON 数据。

我的 C 应用程序使用 COM/OLE 嵌入 IE 浏览器实例,我使用 WININET 进行 GET/POST 操作,所以在这里我压缩了数据。

由于它的 IE 浏览器功能可以在默认 IE 浏览器的情况下自动解压缩 GZIP 数据如何在我的 C 应用程序中通过 WININET 自动解密数据?

c com winapi ole wininet

3
推荐指数
1
解决办法
2970
查看次数

Drag Drop Win API 32

我正在尝试将ListView项目从我的程序拖放到另一个项目(例如将路径拖到VLC的某个位置,然后播放视频文件).我正在使用CF_HDROP剪贴板格式.CopySelection是将STGMEDIUM hglobal变量设置为DROPFILES结构的原因.

void CopySelection(HWND hwndList, STGMEDIUM &stgmed)
{
    HGLOBAL hMem;
    DROPFILES  *ptr;
    DROPFILES dfiles;
    POINT p;

    // get the selection inside the list control
    int iPos = SendMessage(hwndList, LVM_GETNEXTITEM, (WPARAM)-1,(LPARAM)LVNI_SELECTED);
    cout << "iPos: " << iPos << endl;
    LVITEM item;
    char buffer[256];
    string fileDir = "";
    item.iItem = iPos;
    item.iSubItem = 1;
    item.cchTextMax = 256;
    item.pszText = buffer;
    item.mask = LVIF_TEXT;

    ListView_GetItem(hwndList, &item);
    fileDir += string(item.pszText);
    fileDir += "\\";
    item.iItem = iPos;
    item.iSubItem = 0;

    ListView_GetItem(hwndList, &item);
    fileDir += string(item.pszText); …
Run Code Online (Sandbox Code Playgroud)

c++ api winapi ole

3
推荐指数
1
解决办法
3769
查看次数

更新的TWebBrowser现在从一开始就实现了IDocUIHandler,如何继续使用我的自定义实现?

从Delphi 10.0 Seattle开始,Embarcadero改变了TWebBrowser控件的实现:

前西雅图超音速队: TWebBrowser = class(TOleControl)

西雅图+: TWebBrowser = class(TOleControl, IDocHostUIHandler, IDocHostShowUI, IOleCommandTarget)

我运行了一些旧的代码,我已经实现了一个类,可以注册为客户端站点/主机TWebBrowser,我提供了自己的IDocHostUIHandler接口实现.

因为a TWebBrowser现在从一开始就实现它们(并保持它们是私有的)并且很难从我知道的所有内容中下降 - 我如何才能让新TWebBrowser组件重新注册到哪里找到实现IDocHostUIHandler

delphi com ole shdocvw twebbrowser

3
推荐指数
1
解决办法
309
查看次数

如何处理“ Microsoft Excel正在等待另一个应用程序完成OLE操作”

当使用excel自动化其他MS-Office应用程序时,我经常会收到仅显示正常提示的提示, Microsoft Excel is waiting for another application to complete an OLE action.

这仅在使冗长的任务自动化时才会发生。

我该如何以适当的方式处理呢?

最近的两个示例(我认为代码不太重要):

  • 使用Excel从Excel创建accdb数据库,Access.Application并通过对大量数据运行相当复杂的SQL查询来填充该数据库。

    Public Function createDB(pathDB As String, pathSQL As String) As String
    
        Dim dbs As DAO.Database
        Dim sql As String
        Dim statement As Variant, file As Variant
    
        Dim sErr As String, iErr As Integer
    
        With New Access.Application
    
            With .DBEngine.CreateDatabase(pathDB, dbLangGeneral)
    
                For Each file In Split(pathSQL, ";")
    
                    sql = fetchSQL(file)
                    For Each statement In Split(sql, ";" & vbNewLine)
                        If Len(statement) < 5 Then GoTo …
    Run Code Online (Sandbox Code Playgroud)

excel vba ole

3
推荐指数
1
解决办法
4115
查看次数

为什么我的IMessageFilter并不总是有效?

我正在进行Word自动化并摆脱"被调用被拒绝的呼叫"/"消息过滤器指示应用程序正忙"错误我实现了IMessageFilter.当我直接自动化Word时,messagefilter就像魅力一样:

Word.Documents.Open(...)
Document.SaveAs(...)
Run Code Online (Sandbox Code Playgroud)

但是当我调用TOleContainer.DoVerb(ovPrimary)时,我仍然会在Word显示模式对话框时出错.为什么MessageFilter不能与TOleContainers DoVerb方法一起使用?

delphi automation ole ms-word imessagefilter

2
推荐指数
1
解决办法
1740
查看次数

将IDropTarget.Drop方法中获取的IDataObject转换为Outlook消息并将其保存在磁盘上

我需要对用户拖动我的表单上的放置操作做出反应.从资源管理器接受文件并不困难,但是加载OLE对象(Outlook电子邮件)丢失对我来说很难处理.

到目前为止,我有一个带有IDropTarget接口的Delphi表单.

  IDropTarget = interface(IUnknown)
    ['{00000122-0000-0000-C000-000000000046}']
    function DragEnter(const dataObj: IDataObject; grfKeyState: Longint;
      pt: TPoint; var dwEffect: Longint): HResult; stdcall;
    function DragOver(grfKeyState: Longint; pt: TPoint;
      var dwEffect: Longint): HResult; stdcall;
    function DragLeave: HResult; stdcall;
    function Drop(const dataObj: IDataObject; grfKeyState: Longint; pt: TPoint;
      var dwEffect: Longint): HResult; stdcall;
  end;
Run Code Online (Sandbox Code Playgroud)

这是Drop方法实现:

function TForm1.Drop(const dataObj: IDataObject; grfKeyState: Integer;
  pt: TPoint; var dwEffect: Integer): HResult;
var
   aFmtEtc: TFORMATETC;
   aStgMed: TSTGMEDIUM;
   pData: PChar;
 begin


   if (dataObj = nil) then
     raise Exception.Create('IDataObject-Pointer is not valid!');
   with aFmtEtc …
Run Code Online (Sandbox Code Playgroud)

delphi com outlook ole

2
推荐指数
1
解决办法
3426
查看次数

使用"HNetCfg.NATUPnP"Ole对象失败的端口转发

我正在使用代码转发端口.此代码在My Windows 7上运行正常; 但我无法在Windows XP上使用它.

问题更新1(2012-10-17 07:32:00Z)

这是我的源代码:

uses
  ActiveX, oleAuto;

Procedure AddUPnPEntry(Port: Integer; const Name: ShortString; LAN_IP: string);
Var
  Nat: Variant;
  Ports: Variant;
  SavedCW: Word;
Begin
  if NOT(LAN_IP = '127.0.0.1') then
  begin
    try
      Nat := CreateOleObject('HNetCfg.NATUPnP');
      Ports := Nat.StaticPortMappingCollection;

      // Error Raized From Here!!!
      ShowMessage(inttostr(Ports.count));

      Ports.Add(Port, 'TCP', Port, LAN_IP, True, name);
    except
      ShowMessage('An Error occured with adding UPnP Ports. The ' + name +
        ' port was not added to the router. Please check to see if  your ' …
Run Code Online (Sandbox Code Playgroud)

delphi port ole forwarding

2
推荐指数
1
解决办法
2413
查看次数