在Perl调用C/C++代码/动态链接库

原文http://manew.org/?p=62

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中多分配了一些长度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值