Flutter/LED 검사(Windows)
[Dart] dart:ffi g++ 정적 라이브러리가 포함됨 DLL 함수 호출
FDG
2023. 4. 17. 18:38
1. func.cpp : .a(정적 라이브러리) 만들기
extern "C" __declspec(dllexport) int _returnValue(int i);
int _returnValue(int i) {
return (i+1);
}
g++ -c func.cpp
ar rc libfunc.a func.o
2. func2.cpp : 정적 라이브러리를 포함한 동적 라이브러리 만들기
#include <iostream>
extern "C" __declspec(dllexport) int _returnValue(int i);
extern "C" __declspec(dllexport) int _returnValue2(int i);
int _returnValue2(int i) {
std::cout << "Value in DLL : " << i << std::endl;
return _returnValue(i);
}
g++ -shared -static -static-libgcc -static-libstdc++ -o func2.dll func2.cpp -Wl,--output-def,func2.def,--out-implib,libfunc2.a -L. -lfunc
or
g++ -shared -static -o func2.dll func2.cpp -Wl,--output-def,func2.def,--out-implib,libfunc2.a -L. -lfunc
3. dart_ffi_test.dart : 실행 파일 만들고 테스트
import 'dart:ffi' as ffi;
import "package:ffi/ffi.dart" as ffi2;
void main() {
final path = './func2.dll';
final customFunc = ffi.DynamicLibrary.open(path);
final _returnValue2 = customFunc.lookupFunction<
ffi.Int32 Function(ffi.Int32),
int Function(int)>(
'_returnValue2');
print(_returnValue2(1004));
}
dart compile exe dart_ffi_test.dart
4. 실행 결과
Value in DLL : 1004
1005