Xpoint
   [напомнить пароль]

Создание *.exe-файла из *.pl

Метки: [без меток]
2006-08-20 22:28:27 [обр] gammaray[досье]
Проблема заключается в создании *.exe-файла из файла *.pl! Для этого использую программу Perl2Exe! Дело в том, что во время работы программы подключается куча модулей! Причём(этот вопрос я уже поднимал в прошлой теме) модули эти работают только после установки при помощи nmake! В самой программе подключаются:
use Net::SMPP;
use DateStamp;
use Device::Gsm;
Прописываю в файле программы вначале:
#perl2exe_include Net::SMPP
#perl2exe_include DateStamp
#perl2exe_include Device::Gsm
Это указано в программе! Но всё дело в том, что все эти библиотеки используют в свою очередь другие библиотеки! Проблемы с первыми двумя модулями решались при помощи тупого прописания нужных им библиотек в #perl2exe_include ******(этих библиотек было немного!) Основная загвоздка в библиотеке Device::GSM! Она использут в свою очередь библиотеку Devide::Modem, та использует Win32::SerialPort, которая в свою очередь использует Win32::API! Причём эти библиотеки не работали без правильной установки через nmake! Что делает конкретно nmake - я не знаю! Знаю, что не просто тупо копирует файлы по нужным дерикториям! Так вот как мне создать *.exe-файл из файла *.pl с помощью Perl2Exe в этом случае? Или может есть какая другая программа?
спустя 5 часов [обр] Роман Чемисов(36/350)[досье]
gammaray[досье]
По-моему, ничего лучше Perl Dev Kit не существует.
спустя 2 часа 50 минут [обр] AB...(13/236)[досье]
Komodo + Dev Kit как сказал Роман Чемисов[досье] от Activestate
спустя 6 часов [обр] gammaray[досье]
А где скачать PDK с кряком? Чё-то никак найти не могу! А в PDK можно сразу exe компилить?
P.S.Кстати Komodo я итак пользуюсь!
спустя 27 минут [обр] Алексей Севрюков(61/1292)[досье]
сообщение промодерировано
! gammaray[досье] На этом форуме запрещено обсуждать вопросы кряков и взлома программного обеспечения защищенного лицензией.
спустя 3 часа 47 минут [обр] Владимир Палант(146/4445)[досье]
! gammaray[досье]
Рекомендую вспомнить про такой знак пунктуации — точку. Ее иногда можно использовать вместо восклицательного знака. Или, вообще-то, почти всегда. См. Как правильно задавать вопросы.
спустя 1 час 27 минут [обр] Роман Чемисов(36/350)[досье]
gammaray[досье]
А что значит сразу компилить?
спустя 14 часов [обр] gammaray[досье]

"Сразу компилить" - значит, что создавать *.exe-файл при запуске программы. Но это в принципе не важно.
Скачал я Perl Dev Kit! Делаю *.exe-файл и всё равно та же ошибка: "Can't call method "write" on unblessed reference at /PerlApp/Device/Modem.pm line 515, <STDIN> line 1" Я посмотрел модуль Modem.pm 515 строку. Это строка из функции подключения к модему. Вот сама функция:
sub connect {
    my $me = shift();

    my %aOpt = ();
    if( @_ ) {
        %aOpt = @_;
    }

    my $lOk = 0;

    # Set default values if missing
    $aOpt{'baudrate'} ||= $Device::Modem::BAUDRATE;
    $aOpt{'databits'} ||= $Device::Modem::DATABITS;
    $aOpt{'parity'} ||= $Device::Modem::PARITY;
    $aOpt{'stopbits'} ||= $Device::Modem::STOPBITS;

    # Store communication options in object
    $me->{'_comm_options'} = \%aOpt;

    # Connect on serial (use different mod for win32)
    if( $me->ostype eq 'windoze' ) {
        $me->port( new Win32::SerialPort($me->{'port'}) );
    } else {
        $me->port( new Device::SerialPort($me->{'port'}) );
    }

    # Check connection
    unless( ref $me->port ) {
        $me->log->write( 'error', '*FAILED* connect on '.$me->{'port'} );
        return $lOk;
    }

    # Set communication options
    my $oPort = $me->port;
    $oPort -> baudrate ( $me->options->{'baudrate'} );
    $oPort -> databits ( $me->options->{'databits'} );
    $oPort -> stopbits ( $me->options->{'stopbits'} );
    $oPort -> parity ( $me->options->{'parity'} );

    # Non configurable options
    $oPort -> buffers ( 10000, 10000 );
    $oPort -> handshake ( 'none' );
    $oPort -> read_const_time ( 20 ); # was 500
    $oPort -> read_char_time ( 0 );

    # read_interval() seems to be unsupported on Device::SerialPort,
    # while allowed on Win32::SerialPort...
    if( $oPort->can('read_interval') )
    {
        $oPort->read_interval( 20 );
    }

    $oPort -> are_match ( 'OK' );
    $oPort -> lookclear;

    unless ( $oPort -> write_settings ) {
        $me->log->write( 'error', '*FAILED* write_settings on '.$me->{'port'} );
        return $lOk;
    }
    $oPort -> purge_all;

    $me-> log -> write('info', 'sending init string...' );

    # Set default initialization string if none supplied
    $me->options->{'init_string'} ||= 'H0 Z S7=45 S0=0 Q0 V1 E0 &C0 X4';

    $me-> send_init_string( $me->options->{'init_string'} );
    $me-> _reset_flags();

    # Disable local echo
    $me-> echo(0);

    $me-> log -> write('info', 'Ok connected' );
    $me-> {'CONNECTED'} = 1;

}

Метод WRITE определён в модуле Win32::SerialPort:
sub WRITE {
    return if (@_ < 3);
    my $self = shift;
    my $buf = shift;
    my $len = shift;
    my $offset = 0;
    if (@_) { $offset = shift; }
    my $out2 = substr($buf, $offset, $len);
    return unless ($self->post_print($out2));
    return length($out2);
}

Пытался напрямую в своей программе подключать use Win32::SerialPort - не помогает! Всё равно пишется эта ошибка... Кто знает, что делать?
Может можно как-нибудь напрямую прописать, какие модули надо подключать при компиляции exe-шника? Или как-то по-другому ещё сделать...

спустя 2 часа 18 минут [обр] Роман Чемисов(36/350)[досье]
gammaray[досье]
А у Вас этот модем есть сейчас?
спустя 59 минут [обр] gammaray[досье]
Модем есть. И всё работает.
Проблему уже решил! Пришлось в программе непосредственно указывать все пути к модулям через дерективу #perl2exe_include xxxxx
Тогда программа Perl2Exe просто добавила все модули в exe-файл. А в Perl Dev Kit я так это сделать и не смог...
спустя 10 минут [обр] Алексей Севрюков(61/1292)[досье]

Не знаю как всем, а мне это понравилось:

$me->ostype eq 'windoze'

Есть у людей чувство юмора :-)

спустя 2 часа 21 минуту [обр] AB...(13/236)[досье]
В Perl Dev Kit делается еще проще. Там GUI и стоит просто нажать на правую кномку мыщки для того, чтобы активизировать ту или инную функциональность.
Powered by POEM™ Engine Copyright © 2002-2005