我正在研究一组本质上是插件的东西,它们是 COM 服务器。每个插件都有一组由另一个组件管理的配置数据,配置数据的主键是插件的 ProgID。当插件需要访问配置项时,它会进行调用并传入其 ProgID 和所需属性的名称。这是一个遗留设计,我必须保持向后兼容性。
我现在需要加载每个插件的多个实例,每个实例都有一组不同的配置数据。我正在考虑的解决方案是为每个插件创建多个唯一的 ProgID,每个 ProgID 将指向插件的单个 ClsId。因此,插件的每个实例都将通过其 ProgID 进行标识,ProgID 仍用作配置数据的主键,并且所有内容都 100% 向后兼容。
所以,问题:
我有一个像这样的字符串数组:
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提前
我正在使用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) 我有一个 Windows 服务通过 OLE 自动化填充 Excel 工作簿中的单元格。
保存过程不起作用,文件永远不会保存。但是当在 GUI 应用程序中完成时,保存过程会起作用。
服务用户是管理员帐户。我怀疑与桌面的交互。
任何的想法?
我有一个不值得羡慕的任务,即维护一个ActiveX控件,该控件期望OLE_Colors作为控件的后面/颜色.
是否有工具或.NET代码示例将从RGB颜色(或十六进制颜色)转换为OLE_Color?
我想在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) 我想像任何其他Web浏览器或Internet Explorer一样构建Internet浏览器,除了每个窗口应该使用唯一的缓存名称.有任何想法吗?或任何第三方组件?
我有一个嵌入图片(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对象嵌入你的数据库.
我今天提出另一个问题,这让我很头疼,
我确实将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中的所有帮助
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. …