我正在尝试使用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';
}
答案 0 :(得分:2)
问题可能是您在主机名中有下划线,我认为这是无效的。我完全按照您发布的方式尝试了代码并收到错误The parameter is incorrect.
。如果我删除了下划线(例如,testsite
),则API返回true。
您可以添加以下内容以打印失败的错误消息;它将提供有关失败原因的更多信息。
print Win32::FormatMessage( Win32::GetLastError() );
答案 1 :(得分:1)
有两件事突然袭来我:
一,你使用带有字符序列\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设置的其他错误消息。