Posts Tagged ‘ 动态链接库 ’

perl想到的,几乎都可以实现(当然, 其它语言也可以实现, 只是方便程序不同而已).

还有几乎无所不包的cpan

在C中, 当然可以调用C代码, 包括内嵌的C语句, 或C/C++写的动态链接库.

调用方面用的多的有两个: XS和Inline::c ,这里使用了inline::c

嵌入动态链接库:

例如我有一个运态链接库名字为libmylib.so,放在默认的目录下, 里面有个函数CheckDomain(in, out), 第一个参数为输入参数, 第二个参数是返回参数, 我们可以写一个wapper,然后像下面这样调用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/usr/bin/perl -w
use Inline C => Config => LIBS => '-lmylib';
use Inline C;
use strict;
$| = 1;
my $ip = '10.10.10.10';
my $domain = ';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;';
my $ret = getDomain($ip, $domain);
if($ret == 0)
{
	$domain =~ s/;+//g;
	print $domain, "\n";
} else
{
	print "error\n";
	exit 1;
}
 
__END__
__C__
int getDomain(char *in, char *out)
{
	return CheckDomain(in, out);
}

 

如果不需要动态链接库, 直接嵌入C语句, 就更简单一些, 在下面直接写代码, 在上面调用即可。

注: 为何上面的$domain变量写了许多没用的分号?因为可能是C和perl的空间分配不同, C中是靠代码中自己控制的, 而perl中编码人员不需要关心。 这两个的差异会造成一个问题:perl中你分配置了2字节, 则在c中返回的参数中也只能返回2字节(会不会溢出?呀呀呀)。故在perl中多分配了一些长度。
[ad]