标签: ole

多个 ProgID 可以指向同一个 ClsID 吗?

我正在研究一组本质上是插件的东西,它们是 COM 服务器。每个插件都有一组由另一个组件管理的配置数据,配置数据的主键是插件的 ProgID。当插件需要访问配置项时,它会进行调用并传入其 ProgID 和所需属性的名称。这是一个遗留设计,我必须保持向后兼容性。

我现在需要加载每个插件的多个实例,每个实例都有一组不同的配置数据。我正在考虑的解决方案是为每个插件创建多个唯一的 ProgID,每个 ProgID 将指向插件的单个 ClsId。因此,插件的每个实例都将通过其 ProgID 进行标识,ProgID 仍用作配置数据的主键,并且所有内容都 100% 向后兼容。

所以,问题:

  1. 这是一种可以接受的技术吗?(多个 ProgID 都指向单个 ClsID)。
  2. 当我的插件加载时,它是否能够分辨出使用哪个 ProgID 来创建它?

windows com ole com-interop progid

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

std :: string到LPOLESTR

我有一个像这样的字符串数组:

using std::string;
string myArray[] = { string("abc"), string("foo"), string("muh") };
Run Code Online (Sandbox Code Playgroud)

现在我想使用这个功能:

HRESULT Init(T* begin, T* end, IUnknown* pUnk, CComEnumFlags flags = AtlFlagNoCopy );
Run Code Online (Sandbox Code Playgroud)

T在我的情况下是LPOLESTR.所以我需要将std :: string数组分别转换为LPOLESTR我需要一个LPOLESTR*来开始和结束这个数组.怎么做的?

Thx提前

c++ string com ole

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

通过Outlook和OLE稳健地发送电子邮件

我正在使用OLE通过Outlook发送电子邮件.我使用的代码是:

procedure SendOutlookMail;
const
  olMailItem = 0;
var
  OKToUse: boolean;
  Outlook: OleVariant;
  vMailItem: variant;
begin
  OKToUse := false;
  try
    Outlook := GetActiveOleObject('Outlook.Application');
    OKToUse := true;
  except
    try
      Outlook := CreateOleObject('Outlook.Application');
      OKToUse := true;
    except
      on e: exception do begin
        ShowMessage(e.Message);
      end;
    end;
  end;

  if VarIsType(Outlook, varDispatch) then
    ShowMessage('Outlook is varDispatch')
  else
    ShowMessage('Outlook is ***NOT*** varDispatch');

  if OKToUse then begin
    vMailItem := Outlook.CreateItem(olMailItem);
    vMailItem.Recipients.Add('mike@example.com');
    vMailItem.Subject := 'What a wonderful test email';
    vMailItem.Body := 'This is a test --> how amazing';
    vMailItem.Send; …
Run Code Online (Sandbox Code Playgroud)

delphi outlook ole

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

Windows 服务中的 Excel OLE 自动化

我有一个 Windows 服务通过 OLE 自动化填充 Excel 工作簿中的单元格。

保存过程不起作用,文件永远不会保存。但是当在 GUI 应用程序中完成时,保存过程会起作用。

服务用户是管理员帐户。我怀疑与桌面的交互。

任何的想法?

delphi excel ole

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

将RGB颜色转换为OLE_Color

我有一个不值得羡慕的任务,即维护一个ActiveX控件,该控件期望OLE_Colors作为控件的后面/颜色.

是否有工具或.NET代码示例将从RGB颜色(或十六进制颜色)转换为OLE_Color?

.net rgb ole colors

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

在德尔福自动化中粘贴

我想在delphi中粘贴从richedit到word应用程序我使用以下代码但是两次粘贴数据(重复)

  WordApp := GetActiveOleObject('Word.Application');
  WordApp.Visible := True;
  Wordapp.documents.open('C:\Doc1.docx');
  Richedit.Text := 'test text';
  Richedit.SelectAll;
  Richedit.CopyToClipboard;
  WordApp.ActiveDocument.ActiveWindow.Selection.Paste;
  WordApp.selection.paste;
Run Code Online (Sandbox Code Playgroud)

delphi automation ole ms-word

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

如何在不同的缓存上使用TWebbrowser?

我想像任何其他Web浏览器或Internet Explorer一样构建Internet浏览器,除了每个窗口应该使用唯一的缓存名称.有任何想法吗?或任何第三方组件?

browser delphi ole twebbrowser

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

如何从文件创建ole对象 - Ms-access

我有一个嵌入图片(OLE)coulmn表.

我希望能够通过带有浏览选项的表单插入新记录.

无论如何,我有一个文件名,我需要把它变成一个ole对象并将其插入到表单中.我怎么在VBA中这样做?

为了澄清 - 我需要将文件名转换为具有该文件的ole对象,然后将其插入表中.

谢谢,Fingerman.

编辑:

好的,正如@HansUp指出的那样,我需要解释一下.在我的表单中,我有一个绑定的OLE对象,它没有绑定到一个字段,而是绑定到一个dlookup函数.我通过查询和组合框将正确的id输入到控件中 - 因此控制器绑定到:

=DLookUp("picture","articles","id=" & [articles])
Run Code Online (Sandbox Code Playgroud)

请注意,文章不是一个字段而是一个控制器,我不知道这是否有任何差异.

每次更改控制器时,我都会使用me.recalc绑定的OLE来更新它的值.

无论如何,我想只是通过VBA和用户输入文件地址,而不使用控制器但是某种INSERT或somthing,但其他选项将受欢迎.

如果我不清楚,请问!我会澄清并解决自己.

编辑2:

那么如何获取或派生文件名?您是否期望使用ArticleID?图片是否始终位于具有预期文件名的预期位置?如果不使用"浏览"按钮,您想要做什么?您是在寻找基于文件夹和文件名完全自动化的东西,还是在寻找拖放等内容?

通过浏览选项获取文件名,我实现了它.为了简单起见 - 假设用户必须自己将文件名输入到文本框中.现在 - 我希望通过单击按钮,我可以将该文件名作为嵌入式ole对象插入到我的数据库中.我不是在寻找任何自动化也不是拖放(但是,如果拖放工作,它会很棒).有人问,第一次编辑是关于ole控制器的.他认为我的问题可以通过控制器解决 - 所以我详细介绍了我如何解读图片.我不认为它有任何相关性,但如果有人可以使用它,我会没事的.我期望使用articleID进行更新 - 但同样,我不知道这与问题的关系.

我开始认为这可能是不可能的..... :(这是不幸的,因为这个问题是相当直接的.你有一个文件名,你需要它作为一个OLE对象嵌入你的数据库.

ms-access vba ole file access-vba

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

如何将OleVariant转换为IDispatch派生的?

我今天提出另一个问题,这让我很头疼,

我确实将DAO 3.6类型库导入了我的delphi 7,并且开始看到许多有趣的界面,因此我遇到了一个有趣的问题。

每当类Fields出现在另一个类的属性上时,它们都有正确的定义,我的意思是,他被定义为Fields,但是在Index类中,在他描述其结构的所有字段参与者的部分中,属性字段不会出现作为Fields,但作为OleVariant。

查看与TableDefs的区别,这些区别具有Fields属性并与Index定义进行比较:

_TableDef = interface(_DAO)
...
property Fields: Fields read Get_Fields;
...
end;

_Index = interface(_DAO)
...
property Fields: OleVariant read Get_Fields write Set_Fields;
...
end;
Run Code Online (Sandbox Code Playgroud)

问题是,是否有一种方法可以将看起来像OleVariant类型的Field强制转换为Fields接口类型?

我非常感谢StackOverflow中的所有帮助

delphi ole interface

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

Why is this a Not a legal OleAut date with a TimeSpan of 100 hours and 100 minutes

I'm trying to create a date from a TimeSpan that has 100 hours and 100 minutes but i'm gettin the error:

Run-time exception (line 9): Not a legal OleAut date.

Stack Trace:

[System.OverflowException: Not a legal OleAut date.] at System.DateTime.TicksToOADate(Int64 value)

using System;

public class Program
{
    public static void Main()
    {
        Console.WriteLine("Hello World");
        TimeSpan timeSpan = TimeSpan.FromHours(100) + TimeSpan.FromMinutes(100);
        var OADate = DateTime.FromOADate((DateTime.MinValue.AddTicks(timeSpan.Ticks)).ToOADate());

    }
}
Run Code Online (Sandbox Code Playgroud)

This is to link in with a legacy value in the db from vb6. …

c# ole date

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