Outlook -从显示名称获取电子邮件地址.可以在Python中工作,而不是C
Outlook - get email address from Display Name. Works in Python, not C
我正试图将一些代码从Python转换为C和OLE。代码正在从Outlook显示名称中获取电子邮件地址。
Python代码的工作原理如下: recipient = self._outlook.Session.CreateRecipient(name)
recipient.Resolve()
if self._first:
print(inspect.getmembers(recipient))
self._first = False
print(recipient.Resolved)
print(recipient.AddressEntry)
if 'EX' == recipient.AddressEntry.Type:
exchange_user = recipient.AddressEntry.GetExchangeUser()
email = exchange_user.PrimarySmtpAddress
elif 'SMTP' == recipient.AddressEntry.Type:
email = recipient.AddressEntry.Address
print(email)
它基本上是MSDN上VBA代码的python化版本。
然而,在C和OLE中,我只是不明白它,我只能在MSDN和其他论坛上找到c#, VBA和c++与MFC示例(我不感兴趣),以及使用专有框架的建议。
到目前为止我在C中所拥有的。outlookapp
与CoCreateInstance()
初始化成功
IDispatch *pNS = NULL;
{
VARIANT x;
x.vt = VT_BSTR;
x.bstrVal = SysAllocString(L"MAPI");
VARIANT result;
VariantInit(&result);
AutoWrap(DISPATCH_METHOD, &result, outlookapp, L"GetNamespace", 1, x);
pNS = result.pdispVal;
SysFreeString(x.bstrVal);
VariantClear(&x);
}
// Log on by using a dialog box to choose the profile.
{
VARIANT vtShowDialog;
vtShowDialog.vt = VT_BOOL;
vtShowDialog.boolVal = VARIANT_TRUE;
VARIANT vtNewSession;
vtNewSession.vt = VT_BOOL;
vtNewSession.boolVal = VARIANT_TRUE;
if (FAILED(AutoWrap(DISPATCH_METHOD, NULL, pNS, L"Logon", 4, vtNewSession,
vtShowDialog, vtMissing, vtMissing))) {
printf("Logon failed.n"); Sleep(15000); ExitProcess(1);
}
}
printf("Done logging in to Outlookn");
IDispatch *recipient = NULL;
{
VARIANT x;
x.vt = VT_BSTR;
x.bstrVal = SysAllocString(L"John Doe");
VARIANT result;
VariantInit(&result);
HRESULT hr = AutoWrap(DISPATCH_METHOD, &result, pNS, L"CreateRecipient", 1, &x);
if (FAILED(hr)) {
printf("Can not CreateRecipient(), error: %xn", hr); Sleep(60000); ExitProcess(1);
}
recipient = result.pdispVal;
}
{
VARIANT result;
VariantInit(&result);
HRESULT hr = AutoWrap(DISPATCH_METHOD, &result, recipient, L"Resolve", 0);
if (FAILED(hr)) {
printf("Can not call Resolve()n");
Sleep(3000); ExitProcess(1);
}
}
代码在"Can not createrreceiver()"printf消息中死亡,错误0x800706F4对应于"null引用指针被传递给存根"。
AutoWrap也写自己的消息:IDispatch::Invoke("CreateRecipient"=0000210a) failed w/err 0x800706f4
它来自AutoWrap中的代码:
// Make the call
hr = pDisp->Invoke(
dispID,
IID_NULL,
LOCALE_SYSTEM_DEFAULT,
autoType,
&dp,
pvResult,
NULL,
NULL
);
if (FAILED(hr))
{
wprintf(L"IDispatch::Invoke("%s"=%08lx) failed w/err 0x%08lxn",
ptName, dispID, hr);
return hr;
}
最终目标是将地址数据从Outlook馈送到Excel中,并且我已经使用OLE工作的Excel自动化。如果有任何想法,我真的很高兴——我真的试图找到有关这方面的信息,但没有找到多少关于Outlook在这一层面上是如何工作的。
正如Hans Passant所看到的,我只是在这一行输入了&x
而不是x
:
HRESULT hr = AutoWrap(DISPATCH_METHOD, &result, pNS, L"CreateRecipient", 1, &x);
:
HRESULT hr = AutoWrap(DISPATCH_METHOD, &result, pNS, L"CreateRecipient", 1, x);
相关文章:
- pybind11:无法让 std::list 在 Python 中工作
- 为什么这在 c++ 中不起作用,但在 python 中工作
- 设备与Visa在Python中工作的通信,但在C 中不进行
- Windows API "CreateWindowEx" 在 Python (3.6.8) 64 位使用的 DLL 中工作吗?
- 使用 swig 在 Python 中分段错误(核心转储),但当我更改变量名称时它可以工作
- C 插座未接收传入的数据包,在Python中工作
- Python在调试模式下以C 工作,但在EXE文件中不工作
- 尝试将工作python程序转换为C++但不起作用
- 无法让 matplotlib 事件处理程序与 Boost.Python 一起工作
- 无法获得新的 tf。在 Tensorflow 中的 Python shell 中工作的操作
- 如何为嵌入式python解释器设置工作目录
- 为什么这个 extern "C" 函数不能使用 python ctypes 工作?
- 将python嵌入到C++中无法按预期工作
- 如何创建空的工作boost::python::dict
- 无法在opencv中从C++打开视频.它在python中工作
- Regex LookAround 在 python 中工作,但在 C++ 中不起作用
- Outlook -从显示名称获取电子邮件地址.可以在Python中工作,而不是C
- 定义一个像 Python "with" 语句一样工作的 C 宏有什么缺点?
- Python .cpp读取,追加,保存和关闭,但不工作
- c++中是否有任何数据结构或库可以像Python列表和字典一样工作?