Необработанное исключение: _com_error в ячейке памяти 0x0040f4ac

Я использую внешнюю библиотеку EASendMail отправлять электронную почту, используя gmail в качестве SMTP-сервера.

Строка, вызывающая ошибку

oSmtp-> LicenseCode = _T («TryIt»);

ссылка на сайт установить внешнюю библиотеку.

#include "stdafx.h"#include <iostream>
#include "easendmailobj.tlh"#include <string>

using namespace EASendMailObjLib;
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{

string Lrecipient_email = "[email protected]";

::CoInitialize( NULL );

IMailPtr oSmtp = NULL;
oSmtp.CreateInstance( "EASendMailObj.Mail");
oSmtp->LicenseCode = _T("TryIt");  //error is here

// Set your gmail email address
oSmtp->FromAddr = _T(" [email protected]");

// Add recipient email address
oSmtp->AddRecipientEx( _T(recipient_email.c_str()), 0);

// Set email subject
oSmtp->Subject = _T("Payment of Desposit Required");

// Set email body
oSmtp->BodyText = _T("Dear Customer , Please pay your deposit now !!!");

// Gmail SMTP server address
oSmtp->ServerAddr = _T("smtp.gmail.com");

// If you want to use direct SSL 465 port,
// Please add this line, otherwise TLS will be used.
// oSmtp->ServerPort = 465;

// detect SSL/TLS automatically
oSmtp->SSL_init();

// Gmail user authentication should use your
// Gmail email address as the user name.
// For example: your email is "[email protected]", then the user should be "[email protected]"oSmtp->UserName = _T("username");
oSmtp->Password = _T("password");

_tprintf(_T("Start to send email via gmail account ...\r\n" ));

if( oSmtp->SendMail() == 0 )
{
_tprintf( _T("email was sent successfully!\r\n"));
}
else
{
_tprintf( _T("failed to send email with the following error: %s\r\n"),
(const TCHAR*)oSmtp->GetLastErrDescription());
}

if( oSmtp != NULL )
oSmtp.Release();

return 0;
}

Я понятия не имею, почему я получаю следующую ошибку:

Unhandled exception at 0x7558c41f in SendEmail.exe: Microsoft C++ exception: _com_error at memory location 0x0040f4ac..

Отладчик MS Studio показывает это как источник ошибки в файле: easendmailobj.tli

Ошибка 1

 Interface* operator->() const
{
if (m_pInterface == NULL)
{
_com_issue_error(E_POINTER);
}

return m_pInterface;
}

Ошибка 2

inline void IMail::PutLicenseCode ( _bstr_t pVal ) {
HRESULT _hr = put_LicenseCode(pVal);
if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
}

1

Решение

oSmtp-> LicenseCode = _T («TryIt»);
Эта ошибка возникает, когда истекает срок действия пробной версии.

«TryIt» — это код ознакомительной лицензии, который можно использовать только в демонстрационных целях. Через 1 месяц после истечения срока действия лицензии возникает исключение COM.

Вы можете дополнительно проверить эти ссылки

https://www.emailarchitect.net/easendmail/sdk/html/LicenseCode.htm
https://www.emailarchitect.net/easendmail/sdk/html/license.htm

2

Другие решения

Лучше всего окружить весь код

try{
....
}catch(_com_error& ex){
e=e;//a break point here
}

и пройтись по коду с помощью отладчика. Как только он попадает в часть catch, он вызывается ранее вызванным методом. обычно с этим COM-материалом (я не люблю его, но немного знаком с ним), это происходит потому, что более ранний метод получил неправильные параметры, поэтому он возвращал нулевой указатель или что-то в этом роде.

0

IMailPtr oSmtp = NULL;
oSmtp.CreateInstance( "EASendMailObj.Mail");

Это может быть проблемой. Сначала вы присваиваете NULL oSmtpчем вы пытаетесь получить к нему доступ. Пожалуйста, подтвердите, oSmtp вероятно NULL.

0
По вопросам рекламы [email protected]