চিন্ময় কাঞ্চীর উত্তরটি দুর্দান্ত তবে আমি এমন একটি ফাংশনের উদাহরণ চেয়েছিলাম যা একটি সি ++ কোডে একটি ভেরিয়েবল / অ্যারে পাস করে এবং প্রদান করে। যদিও আমি এটি এখানে অন্তর্ভুক্ত করব যদি এটি অন্যের পক্ষে উপযোগী হয়।
একটি পূর্ণসংখ্যা পাস এবং ফিরে দেওয়া
একটি ক্রিয়াকলাপের জন্য সি ++ কোড যা একটি পূর্ণসংখ্যা নেয় এবং একটিকে ফেরত মান যোগ করে,
extern "C" int add_one(int i)
{
return i+1;
}
ফাইল হিসাবে সংরক্ষণ করা হয়েছে test.cpp
, প্রয়োজনীয় বাহ্যিক "সি" নোট করুন (এটি সি কোডের জন্য মুছে ফেলা যেতে পারে)। চিন্ময় কাঞ্চি উত্তরের অনুরূপ যুক্তি সহ এটি g ++ ব্যবহার করে সংকলিত হয়েছে,
g++ -shared -o testlib.so -fPIC test.cpp
পাইথন কোড ব্যবহারসমূহ load_library
থেকে numpy.ctypeslib
পাইথন স্ক্রিপ্ট হিসাবে একই ডিরেক্টরির মধ্যে অভিমানী ভাগ লাইব্রেরিতে পাথ,
import numpy.ctypeslib as ctl
import ctypes
libname = 'testlib.so'
libdir = './'
lib=ctl.load_library(libname, libdir)
py_add_one = lib.add_one
py_add_one.argtypes = [ctypes.c_int]
value = 5
results = py_add_one(value)
print(results)
এটি প্রত্যাশিত হিসাবে 6 টি প্রিন্ট করে।
একটি অ্যারে পাসিং এবং মুদ্রণ
আপনি অ্যারের উপাদান মুদ্রণের জন্য কোনও সি কোডের জন্য নিম্নলিখিতভাবে অ্যারে পাস করতে পারেন,
extern "C" void print_array(double* array, int N)
{
for (int i=0; i<N; i++)
cout << i << " " << array[i] << endl;
}
যা পূর্বের মতো সংকলিত এবং একইভাবে আমদানি করা। এই ফাংশনটি ব্যবহার করার জন্য অতিরিক্ত পাইথন কোডটি তখন হবে,
import numpy as np
py_print_array = lib.print_array
py_print_array.argtypes = [ctl.ndpointer(np.float64,
flags='aligned, c_contiguous'),
ctypes.c_int]
A = np.array([1.4,2.6,3.0], dtype=np.float64)
py_print_array(A, 3)
যেখানে আমরা অ্যারে নির্দিষ্ট করি, প্রথম যুক্তি print_array
, প্রান্তিককরণের নম্পি অ্যারের পয়েন্টার হিসাবে, সি_কন্টিগিউজ bit৪ বিট ভাসমান এবং দ্বিতীয় যুক্তিটি পূর্ণসংখ্যা হিসাবে যা সি কোডকে নম্পি অ্যারেতে উপাদানের সংখ্যা বলে। এটি সি কোড দ্বারা নিম্নলিখিত হিসাবে মুদ্রিত,
1.4
2.6
3.0
>>>
ইম্পোর্টেস্ট.পি আছে? লোকেরা যখন>>>
প্রতিটি লাইনে থাকা কোডটি পোস্ট করে, এটি ইঙ্গিত করে যে এটি ইন্টারেক্টিভ শেলটিতে চলছে। এটিকে কোনও ফাইল থেকে চালানোর জন্য,>>>
যেখানেই প্রদর্শিত হবে সেখানে সরান (এটি 3> চিহ্ন এবং একটি স্থান)।