Tag: idispatch

如何在Delphi中执行ConnectionPoint?

我正在写一个DLL通过它的IDispatch接口与Excel交谈。 在VBA中,我传入一个包含Application.Caller的variables,通过这个variables我通过.pDispVal绘制IDispatch指针。 我想知道的是如何通过该IDispatch指针查询接口。 我想build立一个连接点容器,从那里find一个连接点到Excel。 最终目标是将事情与Excel的计算事件绑定,并能够操纵Excel数据。

在Delphi中为Excel编写一个DLL

我正在使用Turbo Delphi 2006。 该DLL将作为VBA / DLL组合的一部分从Excel内部调用。 问题的第一部分是试图找出如何传递给DLL当前Excel会话的引用。 我见过的大多数其他代码是,它启动了一个独立的Excel实例,与您所在的实例不同。 我见过一些创buildIDispatch实例的C ++代码,然后将某些东西传递给IDispatch对象的一个​​方法,但不知道多lessC ++。 有任何想法吗?

OLE bstr不是null终止?

所以,我试图从C ++和OLE自动化Excel,使用Microsoft提供的Autowrapfunction,在他们的自动化示例中。 我已经得到了,我可以从电子表格的单元格中读取string值。 但是,对于某些值来说,string有些问题,比如它不是以null结尾。 这是我的代码: VARIANT result; VariantInit(&result); AutoWrap(DISPATCH_PROPERTYGET, &result, range, L"Value", 0); wprintf(L"%s, len: %d\n", result.bstrVal, SysStringLen(result.bstrVal)); wprintf(L"abc %s\n", SysAllocString(L"def")); 输出是: John Doe á, 11 abc def 而在Excel中显示的Excel文件中显示如下: John Doe (Excel文档的代码页是否可以成为一个问题?这是一个xlsx文件。)