일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- SSH
- albumbook
- 인증
- git
- otpkey
- apple
- 애플
- Android
- SSL
- appres
- 앨범북
- 안드로이드
- FIDO2
- OTP
- openssl
- Xcode
- css
- 앱스토어
- 앱리소스
- MSYS2
- SWIFT
- Nodejs
- kmip
- SwiftUI
- WebAuthn
- fido
- 2FA
- MYSQL
- MFA
- OSX
- Today
- Total
인디노트
JNI 의 Native 함수를 만들때 유의사항 본문
// *str1 이든 **str2 이든 해당 메모리가 Java 에서 만들어져 올 때는 똑같이 값들이 인, 아웃 모두 전달된다.
// str1 을 malloc 으로 메모리를 만들면 그것을 out 되지 않는다. 따라서 의미가 없다.
// *str2 를 malloc 으로 메모리를 만들면 그것은 out 된다. 하지만 Java 에서 어떻게 해당 메모리를 해제해 줄 수 있을까?
// JNI 함수에서 Java 로부터 들어오는 null 배열을 어떻게 연결 시켜줄 수 있을까? 가능하지 않다. 에러가 난다.
// 따라서 JNI 를 사용한다면 중간에 다른 물리적인 교환이 이루어져야 하는데 그게 여의치 않다.
// JNI 를 사용할 때 Native 에서 메모리를 생성해서 넘겨줘야 한다면 그것은 문제를 내포할 수 있기 때문에 Java 쪽에서 메모리를 만들어서 사용하는 방식이 좋을 듯 싶다.
// Native C 코드에서 ** 를 사용하고 * 가 NULL 인지 아닌지를 확인하여 처리하도록 하면 C 타입과 Java 타입 모두 만족할 수 있을 듯 하다.
// Native 함수에서는 메모리가 만들어져 오는것과 Native 에서 스스로 만들어 out 시키는 (물론 C 타입에서 호출할 때) 방식을 모두 처리하기 위해서 입력되는 포인터 인수를 **str 와 같이 2중 포인터로 사용하도록 하자.
// JNI 에서만 사용하는 Native 함수라면 *str 이렇게만 해도 된다. 왜냐하면 위의 상황에서처럼 어차피 메모리가 Java 쪽에서 만들어져 오는 방식으로 구현해야 하기 때문이다.
'소스 팁' 카테고리의 다른 글
프로세서 별 자료형 길이 (0) | 2022.09.03 |
---|---|
Unique System Identifier in C CPP on Windows, Linux and Mac (0) | 2022.06.28 |
Windows Hello Unlock using Companion Devices (0) | 2022.04.15 |
RHEL/CentOS 에 python 2.7, 3.* 설치하기 (0) | 2019.08.17 |
HTTP 쿠키와 톰캣 버전별 이슈 (0) | 2018.12.17 |