доступ к DLL из Perl - PullRequest
       0

доступ к DLL из Perl

0 голосов
/ 28 января 2011

Я пытаюсь получить доступ к некоторой функции Win32 API с помощью Win32::API, модуль ниже - мой код:

Код выполняется, но результат равен 0 (безуспешно).Кто-то может посоветовать, если есть проблема с кодом ниже или если есть проблема с переносом значений из стороны perl в сторону c.

my $site = 'http://www.test_site.cn/\0';
my $key =0; #NULL
my $value ='data=testdata; expires = Thu, 15-Nov-2010 15:08:00 GMT\0';

my $InternetSetCookie = Win32::API->new('Wininet.dll', 'BOOL InternetSetCookie(
  LPCTSTR lpszUrl,
  LPCTSTR lpszCookieName,
  LPCTSTR lpszCookieData)'
);

my $res = $InternetSetCookie->Call($site,$key,$value);

if ($res) {
  print 'success';
}

Ответы [ 2 ]

2 голосов
/ 28 января 2011

Проблема может заключаться в том, что у вас есть подчеркивание в имени хоста, которое я считаю недопустимым.Я попробовал код в точности, как вы опубликовали, и получил ошибку The parameter is incorrect..Если я удалил подчеркивание (например, testsite), то API вернул true.

Вы можете добавить следующее, чтобы напечатать сообщение об ошибке для сбоев;это даст немного больше информации о причине сбоя.

print Win32::FormatMessage( Win32::GetLastError() );
1 голос
/ 28 января 2011

Две вещи выпрыгивают из меня:

Во-первых, вы используете строку в одинарных кавычках с последовательностью символов \0, что, вероятно, не то, что вам нужно. Используйте строки в двойных кавычках для интерполяции этой последовательности в символ NUL или добавьте ее отдельно:

my $site = "http://www.test_site.cn/\0";
my $value ='data=testdata; expires = Thu, 15-Nov-2010 15:08:00 GMT' . chr(0);

Во-вторых, вы устанавливаете $key на 0, но ваш комментарий указывает, что вы думаете, что он устанавливает NULL. Perl очень разнородный гибкий в отношении обработки чисел как строк и наоборот, поэтому в результате вы, вероятно, передаете строковое значение "0" в функцию DLL (и, возможно, без символа NUL в конце строки). Вы можете попробовать один из

my $key = '';
my $key = "\0";

Кроме того, проверьте $! и $^E для других сообщений об ошибках, установленных Perl и Windows.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...