Re[14]: КОП в linux
От: Mamut Швеция http://dmitriid.com
Дата: 22.06.06 17:02
Оценка: 14 (1) +1
Здравствуйте, eao197, Вы писали:

E>Здравствуйте, Mamut, Вы писали:


M>>
M>>ISDKSendPtr send;

M>>send -> SetTo(L"123 45 56");
M>>send -> SetCompany(L"My Company");
M>>send -> SetSubject(L"My Fax");
M>>send -> SetPrintFromApp(TRUE);

M>>/* Печатаем на принтер WinFax*/

M>>send -> Send();
M>>


M>>Красота! Считывание пришедших сообщений — в таком же стиле. Ну, COM'овском.


E>А чем это лучше, например, вот такого:

E>
E>system( "faxsend --to '123 45 56' --company 'My Company' --subject 'My Fax'" );
E>


Всем Ну, вернее, отсылка самого факса, конечно, практически равнозначна. А вот уже считывание факсовых событий, пробег по папкам в винфаксе и вытягивание из них сообщений может оказаться для Unix-way геморроем (пишу по памяти):


ISDKLogPtr log;
log.CreateInstance();

bstr_t folderID = log -> GetFolderFirst(FAX_FOLDER_STANDARD, L"");
if(folderID.Length() > 0)
{
    folderID = log -> GetFolderFirst(FAX_FOLDER_NONE, folderID);
    while(folderID.Length() > 0)
    {
        bstr_t messageID = log -> GetMessageFirst(folderID);
        while(messageID.Length() > 0)
        {
            bstr_t messageTo = log -> GetMessageTo(messageID);
            bstr_t messageCompany = log -> GetMessageCompany(messageID);
            bstr_t messageFax = log -> GetMessageFax(messageID);
            /* ... и так далее. Там штук 20 параметров, */
            /* включая даты, время, количество попыток, ошибки и т.д. */
            
            messageID = log -> GetMessageNext(folderID, messageID);
        }
        
        folderID = log -> getFolderNext();
    }
}



Unix-way подразумевает вызов faxsend для получения некоторого структурированного списка папок и сообщений. Этот список еще надо будет ручками распарсить и прийти, в общем, к такому же коду, что я привел, но с бОльшим геморроем (парсер-то придется писать).

Тут есть еще один грабель — пути к исполняемым фалам. В *nix же тоже есть переменная окружения PATH (это если я не ошибаюсь) То есть, faxsend на самом деле придется запускать как-то так:
/usr/local/faxsend/bin/faxsend --faxlist


А faxsend не обязательно в той папке находится В случае с COM'ом нам достаточно, чтобы WinFax был просто установлен в системе.

Но, опять же, я не против Unix-way. Он имеет право на существование и порой весьма и весьма полезен. Но он не единственный путь.

ЗЫ. WinFax'овые объекты тоже весьма Unix-way. Во-первых, возвращают только BSTR. Во вторых, функции GetMessageTime и GetMessageDate возвращают строки locale-aware. То есть, на US locale они возвращают, соответственно, "06/22/2006" и "08:01 РМ". А на RU locale — "22.06.2006" и "20:01"
От чего, от чего, от чего тах хорошо?
Потому что кто-то любит программиста
<< RSDN@Home 1.2.0 alpha rev. 647>>


dmitriid.comGitHubLinkedIn
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.