카메라에 연결하여 사진을 찍고 데이터를 piddle로 읽어들이는 모듈을 만듭니다. 이 모든 작업은 인라인 :: C 명령에서 수행됩니다. PDL documentation에있는 절차를 사용하여 pdl *
을 생성하고 반환 할 수 있습니다. 그러나 카메라가 사진을 찍지 못할 수도 있습니다.이 경우 보통 my $pic_pdl = $Camera->TakePicture or die "Failed to take image"
에 따라 0
을 반환하고 싶습니다. 이것은 Inline_Stack_Push
메커니즘을 사용해야 할 것 같지만 pdl *
을 SV*
으로 올바르게 변환하는 방법을 모르겠습니다. 또한 가능한 경우 오류 코드로 $!
을 설정하고 싶습니다. 인라인에서이 작업을 수행 할 수 있습니까?Perl Inline :: C pdl을 반환하거나 실패시 0을 반환합니다.
2
A
답변
6
pdl*
은 typemap에있는 코드로 SV로 변환됩니다. 나는 그 권리를 읽는다면
$ cat `perl -E'use PDL::Core::Dev; say PDL_TYPEMAP'`
TYPEMAP
pdl* T_PDL
pdl * T_PDL
Logical T_IV
float T_NV
INPUT
T_PDL
$var = PDL->SvPDLV($arg)
OUTPUT
T_PDL
PDL->SetSV_PDL($arg,$var);
, 당신은 같은 것을 할 수 있어야한다 :
는$!
에 관해서는
SV* my_new {
pdl* p = NULL;
...
if (error) {
if (p)
free(p); /* I think */
return &PL_sv_undef;
} else {
SV* rv = newSV(0);
PDL->SetSV_PDL(rv, p);
return rv;
}
}
, 단순히 C의 errno
에 대한 인터페이스입니다. 단순히 errno
으로 설정하십시오.
$ perl -E'use Inline C => "void f(int i) { errno = i; }"; f($ARGV[0]); say 0+$!; say $!;' 2
2
No such file or directory
$ perl -E'use Inline C => "void f(int i) { errno = i; }"; f($ARGV[0]); say 0+$!; say $!;' 3
3
No such process
$ perl -E'use Inline C => "void f(int i) { errno = i; }"; f($ARGV[0]); say 0+$!; say $!;' 4
4
Interrupted system call
+0
알다시피, 나는 당신이 이것을 올렸을 때 typemap을보고있었습니다. 네가 옳았다는 느낌이 들었다. 그리고 C의 배경에서 오지 않았기 때문에'erro'에 대한 정보를 주셔서 감사합니다. –
+1
@Joel, [errno.h] (http://linux.die.net/man/3/errno)는'errno'를 설정하는 데 사용할 수있는 이식 가능한 상수 (예 : 거부 된 EACCES)를 제공합니다. – ikegami
관련 문제
- 1. Int32.TryParse()는 실패시 0을 반환합니다 - 성공 또는 실패?
- 2. mysql_errno는 항상 0을 반환합니다.
- 3. GetPrivateProfileSectionNames는 항상 0을 반환합니다.
- 4. SPNavigation.Children은 항상 0을 반환합니다.
- 5. CurrentDb.RecordsAffected는 0을 반환합니다. 왜?
- 6. PHP 함수가 0을 반환합니다.
- 7. ColumnDefinition.ActualWidth에 바인딩하여 0을 반환합니다.
- 8. GetThreadContext는 EBP = 0을 반환합니다.
- 9. inline functions in C++
- 10. ojspc은 에러시 항상 0을 반환합니다.
- 11. CLLocation distanceFromLocation 항상 0을 반환합니다.
- 12. MenuRef GetControl32BitValue 항상 0을 반환합니다
- 13. ASP MVC DropDownList는 0을 반환합니다.
- 14. Zend Framework : lastInsertId가 0을 반환합니다.
- 15. Linux futex syscall은 0을 반환합니다.
- 16. AJAX 요청 상태가 0을 반환합니다.
- 17. NSMutableArray 개수는 항상 0을 반환합니다.
- 18. Grid.GetRow 및 Grid.GetColumn이 0을 반환합니다.
- 19. NSSegmentedControl -selectedSegment는 항상 0을 반환합니다.
- 20. NSSlider 읽기는 항상 0을 반환합니다.
- 21. QList :: iterator는 (오류) 0을 반환합니다.
- 22. 함수 팩()은 0을 반환합니다.
- 23. CLLocationDegrees는 값이 있지만 0을 반환합니다.
- 24. javascript - 위치 함수는 0을 반환합니다.
- 25. HttpWorkerRequest.GetBytesRead()는 항상 0을 반환합니다.
- 26. 안드로이드 데이터베이스의 rowid를 검색하려고하면 항상 0을 반환합니다.
- 27. C prog : 파일 추가 후 읽기 여전히 0을 반환합니다.
- 28. C++ 소켓 select() 함수는 많은 연결로 0을 반환합니다.
- 29. WCF Stream.Read는 항상 클라이언트에서 0을 반환합니다.
- 30. 코코아 소켓 프로그래밍 NSInputStream read는 0을 반환합니다.
NULL을 반환하려고 했습니까? – ikegami