1+
2+ // late binding
3+
4+ bool ok = true ;
5+ HINSTANCE hinstLib = LoadLibrary(TEXT(" libfftw3f-3.dll" ));
6+
7+ if (hinstLib == NULL )
8+ hinstLib = LoadLibrary(TEXT(" fftw3.dll" ));
9+
10+ if (hinstLib == NULL )
11+ hinstLib = LoadLibrary(TEXT(" fftw.dll" ));
12+
13+ if (hinstLib != NULL )
14+ {
15+ d->hinstLib = hinstLib;
16+ d->fftwf_free = (fftwf_free_proc)GetProcAddress (d->hinstLib , " fftwf_free" );
17+ d->fftwf_malloc = (fftwf_malloc_proc)GetProcAddress (d->hinstLib , " fftwf_malloc" );
18+ // for 1 d fft
19+ d->fftwf_plan_dft_r2c_1d = (fftwf_plan_dft_r2c_1d_proc)GetProcAddress (d->hinstLib , " fftwf_plan_dft_r2c_1d" );
20+ d->fftwf_plan_dft_c2r_1d = (fftwf_plan_dft_c2r_1d_proc)GetProcAddress (d->hinstLib , " fftwf_plan_dft_c2r_1d" );
21+ // for 2d fft
22+ d->fftwf_plan_dft_r2c_2d = (fftwf_plan_dft_r2c_2d_proc)GetProcAddress (d->hinstLib , " fftwf_plan_dft_r2c_2d" );
23+ d->fftwf_plan_dft_c2r_2d = (fftwf_plan_dft_c2r_2d_proc)GetProcAddress (d->hinstLib , " fftwf_plan_dft_c2r_2d" );
24+
25+
26+
27+ d->fftwf_destroy_plan = (fftwf_destroy_plan_proc)GetProcAddress (d->hinstLib , " fftwf_destroy_plan" );
28+ d->fftwf_execute = (fftwf_execute_proc)GetProcAddress (d->hinstLib , " fftwf_execute" );
29+
30+ d->fftwf_execute_dft_r2c = (fftwf_execute_dft_r2c_proc)GetProcAddress (d->hinstLib , " fftwf_execute_dft_r2c" );
31+ d->fftwf_execute_dft_c2r = (fftwf_execute_dft_c2r_proc)GetProcAddress (d->hinstLib , " fftwf_execute_dft_c2r" );
32+ // required for internal threading
33+ // fftwf_init_threads = (fftwf_init_threads_proc)GetProcAddress(hinstLib, "fftwf_init_threads");
34+ // fftwf_plan_with_nthreads = (fftwf_plan_with_nthreads_proc)GetProcAddress(hinstLib, "fftwf_plan_with_nthreads");
35+ // fftwf_cleanup_threads = (fftwf_cleanup_threads_proc)GetProcAddress(hinstLib, "fftwf_cleanup_threads");
36+ // fftwf_cleanup = (fftwf_cleanup_proc)GetProcAddress(hinstLib, "fftwf_cleanup");
37+
38+ }
39+ if (d->hinstLib == NULL || d->fftwf_free == NULL || d->fftwf_malloc == NULL
40+ || d->fftwf_plan_dft_r2c_1d == NULL || d->fftwf_plan_dft_c2r_1d == NULL
41+ || d->fftwf_plan_dft_r2c_2d == NULL || d->fftwf_plan_dft_c2r_2d == NULL
42+ || d->fftwf_destroy_plan == NULL || d->fftwf_execute == NULL
43+ || d->fftwf_execute_dft_r2c == NULL || d->fftwf_execute_dft_c2r == NULL
44+ // required for internal threading
45+ // || d->fftwf_init_threads == NULL || d->fftwf_plan_with_nthreads == NULL
46+ // || d->fftwf_cleanup_threads == NULL || d->fftwf_cleanup == NULL
47+
48+
49+ )
50+ ok = false ;
51+
52+ //
53+ /*
54+ code for fft dll internal threading
55+ numCPU = 1;
56+ int nThreadMult = 1; // one thread per cpu
57+
58+ SYSTEM_INFO sysinfo;
59+ GetSystemInfo(&sysinfo);
60+
61+ numCPU = sysinfo.dwNumberOfProcessors;
62+ // check number of processors
63+
64+ d->fftwf_init_threads();
65+
66+ d->fftwf_plan_with_nthreads(nThreadMult * numCPU);
67+ */
0 commit comments