小编Lum*_*umi的帖子

为什么LIB文件具有如此双重性质的野兽?

我正试图在Microsoft Windows上理解这个LIB文件业务,我刚刚发现了一个发现 - 我希望 - 消除迄今为止阻止我清楚地掌握这个问题的混乱.也就是说,LIB文件不是他们的文件扩展名表明的那种文件.

:: cd "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib"

:: lib /nologo /list Ad1.Lib
obj\i386\activdbgid.obj
obj\i386\activscpid.obj
obj\i386\ad1exid.obj
obj\i386\dbgpropid.obj
obj\i386\dispexid.obj

:: lib /nologo /list oledb.lib
o:\winmain.obj.x86fre\enduser\…\oledb\uuid\objfre\i386\oledbiid.obj
o:\winmain.obj.x86fre\enduser\…\oledb\uuid\objfre\i386\oledbnewiid.obj
o:\winmain.obj.x86fre\enduser\…\oledb\uuid\objfre\i386\cmdtreeiid.obj
o:\winmain.obj.x86fre\enduser\…\oledb\uuid\objfre\i386\oledbdepiid.obj

:: lib /nologo /list AdvAPI32.Lib | sort | uniq -c
    731 ADVAPI32.dll
Run Code Online (Sandbox Code Playgroud)

前两个示例包含目标文件(在lib.exe实用程序显示时显示为相对路径或绝对路径).但是,第三个示例仅包含对DLL的731个引用.(我想lib.exe这不是为了显示这种文件的更多有用信息.)

一些包含目标文件,它们是静态库.其他包含符号,它们是导入库.(这里有一个简短的解释.)

因此,静态库似乎是.aLinux 上文件的等价物,而DLL似乎映射到.soLinux 上的文件.(顺便说一下,导入库如何适应这个Windows/Linux等效图片?)

现在我想知道为什么会这样?为什么Microsoft决定为导入库提供与静态库相同的文件扩展名?(我理解,从历史上看,静态图书馆是第一位的,就像原始形式的生活先于更复杂的形式.)为什么他们不会说,好吧,这些是新的图书馆,他们应该被称为进口图书馆,他们应该承担文件扩展名.ILB(或其他)?

c dll shared-libraries static-libraries

50
推荐指数
1
解决办法
8046
查看次数

Perl中的ithreads(解释器线程)的用例以及使用或不使用它们的基本原理?

如果您想了解如何使用Perl解释器线程,有良好的文档perlthrtut(线程教程),并threads附注手册页.写一些简单的脚本绝对够好.

但是,我发现在网络上的一些指导,为什么怎样明智地使用Perl解释器线程.事实上,关于它们的讨论并不多,如果人们谈论它们,通常会阻止人们使用它们.

这些线程,可当perl -V:useithreadsuseithreads='define';和释放use threads,也被称为的ithread,也许更恰当,以便他们有很大的不同,从由Linux或Windows操作系统或Java虚拟机中的任何内容所提供的线程默认情况下,而是一个共享大量数据被复制,而不仅仅是线程堆栈,因此显着增加了进程大小.(要查看效果,请在测试脚本中加载一些模块,然后在循环中创建线程,每次都按下按键,并观察任务管理器中的内存增加或top.)

[...]每次启动线程时,所有数据结构都将复制到新线程中.当我说全部,我的意思是全部.这包括包括stashes,全局变量,范围内的词汇.一切!

- 编程Perl ithreads之前需要了解的事情(Perlmonks 2003)

在研究Perl ithreads的主题时,你会看到人们不鼓励你使用它们("非常糟糕的主意","从根本上有缺陷",或"从不使用ithreads for any").

Perl线程教程强调"Perl线程是不同的",但它没有太多麻烦解释它们是如何不同以及这对用户意味着什么.

有关ithreads实际内容的有用但非常简短的解释来自WINDOWS PROCESS EMULATIONCoro标题下的联机帮助页.该模块的作者(Coro - perl中唯一真正的线程)也不鼓励使用Perl解释器线程.

在某处我读到,在启用线程的情况下编译perl会导致解释器显着变慢.

有从2003年Perlmonks页面(你需要的东西之前的Perl编程的ithread知道),其中笔者问:"现在你可能想知道为什么Perl中的ithread不使用fork()那不是已经取得了很多更有意义?" 这似乎是由forkspragma 的作者写的.不确定该页面上提供的信息在2012年仍适用于较新的Perls.

以下是Perl中线程使用的一些指导原则,我从读数中提炼出来(可能是错误的):

parallel-processing perl multithreading

30
推荐指数
2
解决办法
4085
查看次数

cmd.exe和PowerShell中的PROMPT(仅适用于PROMPT)的颜色?

所以在Bash中你只需配置PS1为你的提示添加颜色.我说的是正确的提示,而不是前景(文本)或背景的颜色.它在Bash中非常简单,如果你需要在凌乱的文本输出中找到你的命令,它会有很大的帮助.

您是否可以cmd.exe为PowerShell 实现相同或后退?彩色提示?

我不知道是否可以通过加载在Win32之前的日子里完成ANSI.SYS.我认为这只是为了使前景和背景丰富多彩.但我可能错了.无论如何,那些日子已经过去,在我们现代(我知道),我们正在使用cmd.exe,或PowerShell.

我知道cmd.exe和PowerShell都能够进行彩色输出.对于cmd.exe,只需运行color /?即可查找.但我的问题不是关于前景和背景,这是人类都知道的 - 它只是改变cmd.exe的提示颜色,可能是通过PROMPT环境变量通过PS1变量为Bash?可能吗?

不,Cygwin不是替代品.我是使用MinTTY的Cygwin用户,我喜欢它.但我仍然希望我的cmd.exe提示色.

powershell cmd prompt command-prompt

23
推荐指数
4
解决办法
1万
查看次数

"根据经验,在C++中使所有方法成为虚拟" - 声音建议?

我刚刚发生了标题中的陈述.完整的报价是:

根据经验,使所有方法都是虚拟的(包括析构函数,而不是构造函数),以避免与遗漏虚拟关键字相关的问题.

我在Wrox的专业C++书中找到了这个.你可以谷歌检查.

有什么事吗?我原以为你只提供选择扩展点,而不是默认的可扩展性.例如,Herb Sutter在2001年发表的一篇文章就这么说了.从那时起,有什么改变发生了戏剧性的规范吗?(请注意,我是一名C++ noob,因此我在过去十年中没有关注过这个问题.)

c++ virtual

15
推荐指数
2
解决办法
1642
查看次数

如何使用IIS 7.5配置Perl/FCGI(FastCGI)?

我正在尝试使用IIS 7.5运行Perl/FastCGI(FCGI).版本C:\Windows\System32\inetsrv\iisfcgi.dll7.5.7601.17514.这是我web.config和我的Perl脚本:

D:\MiLu\Dev :: more /t1 web.config
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
 <system.webServer>
  <directoryBrowse enabled="true" />
  <handlers>
   <add name="FCGI" path="*.pl" verb="*"
    modules="FastCgiModule"
    scriptProcessor="C:\Opt\Cygwin\bin\perl.exe"
    resourceType="Unspecified" requireAccess="Script" />
  </handlers>
 </system.webServer>
</configuration>

D:\MiLu\Dev :: more /t4 Perl\fcgi\count.pl
use strict;
use warnings;
use FCGI;

my $count = 0;
my $request = FCGI::Request();

while ( $request->Accept >= 0 ) {
    print "Content-type: text/html\r\n\r\n", ++$count;
}
Run Code Online (Sandbox Code Playgroud)

所有我得到的是一个带有IIS通用错误页面的500,说明"FastCGI进程意外退出"并列出了可能的错误原因.

脚本从命令行运行正常,打印其三行然后立即退出,表明脚本和模块安装正常.(顺便说一下,我从FCGI手册中复制了它,所以应该没问题.)

D:\MiLu\Dev :: C:\Opt\Cygwin\bin\perl.exe Perl\fcgi\count.pl
Content-type: text/html

1
Run Code Online (Sandbox Code Playgroud)

有一个FCGI::IIS module,但是,它仅出现在IIS …

iis perl fastcgi iis-7.5

11
推荐指数
1
解决办法
7578
查看次数

如何使Moose构造函数死于传递未声明的属性?

默认情况下,穆斯非常宽容.您可以拥有一个名为的类Cucumber,并将未声明的属性(如wheels)传递给构造函数.Moose默认不会抱怨.但我可能更喜欢穆斯而die不是接受未申报的属性.我怎样才能做到这一点?我似乎记得读过它是可能的,但是在文档中找不到它所说的地方.

package Gurke;
use Moose;
has color => is => 'rw', default => 'green';
no Moose;
__PACKAGE__->meta->make_immutable;

package main; # small test for the above package
use strict;
use warnings;
use Test::More;
use Test::Exception;
my $gu = Gurke->new( color => 'yellow' );
ok $gu->color, 'green';
if ( 1 ) {
    my $g2 = Gurke->new( wheels => 55 );
    ok ! exists $g2->{wheels}, 'Gurke has not accepted wheels :-)';
    # But the caller might not …
Run Code Online (Sandbox Code Playgroud)

perl moose

9
推荐指数
1
解决办法
360
查看次数

从SYS_CONTEXT/USERENV读取所有参数

所以我们在Oracle中有这个SYS_CONTEXT函数,它有两个参数,第一个是命名空间,第二个是参数名.有一个预定义的命名空间USERENV,它带有各种参数,确切的数量和名称取决于所使用的Oracle版本.

使用Firefox和Firequery,您可以从上面链接的Oracle doc页面获取所有参数名称的列表,如下所示:

$("tr > td[id] > p > code").map(function () { return $(this).text() })
Run Code Online (Sandbox Code Playgroud)

然后你可以构建一个读取和输出整个上下文的过程 - 至少对于你已经获取参数的版本.

但抛开这种静态的阅读方式SYS_CONTEXT/USERENV,是否有一种动态的方式呢?数据字典中的某些地方列出了有效参数的名称USERENV

至于我为什么要阅读它USERENV,它只是为了闲置的学习目的和好奇心.

oracle

9
推荐指数
2
解决办法
3万
查看次数

VBScript中的Boolean Not运算符

考虑以下两个涉及VBScript中按位比较的条件:

If     1 And 3  Then WScript.Echo "yes" Else WScript.Echo "no"
If Not(1 And 3) Then WScript.Echo "yes" Else WScript.Echo "no"
Run Code Online (Sandbox Code Playgroud)

我认为输出应该是:

yes
no
Run Code Online (Sandbox Code Playgroud)

但实际输出是:

yes
yes
Run Code Online (Sandbox Code Playgroud)

等待一秒钟,所述Not操作者应该在的表达式执行逻辑非.据我所知,逻辑否定truefalse.我必须得出结论认为它不符合这一承诺吗?怎么样,为什么以及这里发生了什么?理由是什么,如果有的话?

vbscript boolean bit-manipulation

9
推荐指数
2
解决办法
4万
查看次数

Moose(Perl):将undef转换为空字符串或0而不是die()

由于不完整的数据被提供给我的Moose构造函数,我收到了很多 QA 例外.属性名称存在于构造函数参数中,但值为undef.

事实上,许多脚本应用程序都是生活中的事实undef.而且这通常很好.你不希望来自warningspragma 的烦人的警告(所以你这样做no warnings 'uninitialized'),你当然不希望你的代码死掉,因为一个小的值,比如房子号,就是undef.

所以不用多说,我希望我的Moose构造函数表现得像直接Perl(即没有use warnings 'uninitialized'),这是根据需要转换undef0空字符串.此示例中显示的尝试不适用于存在属性名称但值为的情况undef.我可以想到BUILDARGS用来实现我想要的东西.但是,在没有使用MooseX :: UndefTolerant(不幸的是我不能使用,因为它没有安装)的情况下,在普通的Moose中是否有一种声明性的方式?

package AAA;
use Moose;
has 'hu', is => 'ro', isa => 'Str';
has 'ba', is => 'ro', isa => 'Int';
no Moose; __PACKAGE__->meta->make_immutable;

package BBB;
use Moose; extends 'AAA';
has '+hu', default => ''; # don't want to die on undef
has '+ba', default …
Run Code Online (Sandbox Code Playgroud)

perl moose undefined

8
推荐指数
1
解决办法
2474
查看次数

如何使用Moose为数组属性添加便利函数?

我担心这是一个基本问题.看看下面的代码.我想知道是否有声明的方式slices属性,以这样的方式,以避免的样板get_slicesadd_slice.

package Gurke;
use Moose;

has slices => is => 'rw', isa => 'ArrayRef[Str]', default => sub { [] };

sub get_slices { return @{ $_[0]->slices } }

sub add_slice {
    my( $self, $slice ) = @_;
    push @{ $self->slices }, $slice;
    return;
}

no Moose;
__PACKAGE__->meta->make_immutable;

package main; # now a small test for the above package
use strict;
use warnings;
use Test::More;
my $gu = Gurke->new;
$gu->add_slice( 'eins' );
$gu->add_slice( 'zwei' ); …
Run Code Online (Sandbox Code Playgroud)

perl moose

7
推荐指数
1
解决办法
655
查看次数