- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I created a dll created using the IPP function ippiFFTGetSize_C_32fc (). Referencing this dll file from wpf project (c #) results in "System.DllNotFoundException: Unable to load DLL 'TEST.dll'" error.
=========================================================================================
// C/C++ export.def
LIBRARY EXPORTS ippiFFTGetSize_C_32fc
// C/C++ dllMain.cpp
#define WIN32_LEAN_AND_MEAN #include <windows.h> #include "stdafx.h" #include "HIOTEST.h" #include "ipp.h" BOOL WINAPI DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: ippInit(); break; case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; }
// C/C++ HIOTEST.h
#pragma once #include "ipp.h" #ifdef HIOTEST_EXPORTS #define HIOTEST_API extern "C" __declspec(dllexport) #else #define HIOTEST_API extern "C" __declspec(dllimport) #endif HIOTEST_API int HioTest(Ipp32fc* csSrcImg, Ipp32fc* csDstImg);
// C/C++ HIOTEST.cpp
#include "stdafx.h" #include "ipp.h" #include "ippi.h" #include "ipptypes.h" #include "HIOTEST.h" #include "ippcore.h" #include "ippvm.h" #include "ipps.h" int HioTest(Ipp32fc* csSrcImg, Ipp32fc* csDstImg) { // FFT Init IppiFFTSpec_C_32fc *pSpec = NULL; /* Pointer to FFT spec structure */ Ipp8u *pMemInit = NULL, *pBuffer = NULL; /* Pointer to the work buffers */ int sizeSpec = 0, sizeInit = 0, sizeBuf = 0; /* Size of FFT spec structure, init and work buffers */ int order = 9; ippiFFTGetSize_C_32fc(order, order, IPP_FFT_DIV_INV_BY_N, ippAlgHintAccurate, &sizeSpec, &sizeInit, &sizeBuf); return 5; }
-------------------------------------------------------------------------------------------------------------------------------------------------------
// C# (HIO_exe.sln)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using Microsoft.Win32; using System.Runtime.InteropServices; using System.Drawing; using System.Numerics; namespace HIO_exe { /// <summary> /// MainWindow.xaml에 대한 상호 작용 논리 /// </summary> public partial class MainWindow : Window { public struct CsIpp32fc { public float real, im; } [DllImport("HIOTEST.dll", CallingConvention = CallingConvention.StdCall)] public static extern int HioTest(ref CsIpp32fc csSrcImg, ref CsIpp32fc csDstImg); public string imgPath; public Image origin = new Image(); public BitmapSource dstImg; // FuctionWithIpp.dll Load public MainWindow() { InitializeComponent(); } private void OpenFile_Click(object sender, RoutedEventArgs e) { // file open OpenFileDialog openDialog = new OpenFileDialog(); openDialog.InitialDirectory = @"C:\Desktop"; openDialog.Filter = "Image Files | *.jpg; *.png; *.tif; *.bmp; *.tiff"; openDialog.CheckFileExists = true; openDialog.CheckPathExists = true; if(openDialog.ShowDialog().GetValueOrDefault()) { imgPath = openDialog.FileName; BitmapImage bitmap = new BitmapImage(new System.Uri(openDialog.FileName)); SrcCanvas.Source = bitmap; SrcCanvas.Width = tabBorder.Width; SrcCanvas.Height = tabBorder.Height; srcWidth.Content = bitmap.PixelWidth; } } private void Run_Click(object sender, RoutedEventArgs e) { BitmapImage LoadBitMap = new BitmapImage(new System.Uri(imgPath)); int stride = LoadBitMap.PixelWidth; int size = LoadBitMap.PixelHeight * stride; byte[] srcImg = new byte[size]; LoadBitMap.CopyPixels(srcImg, stride, 0); CsIpp32fc[] CsSrcImg = new CsIpp32fc[size]; CsIpp32fc[] CsDstImg = new CsIpp32fc[size]; for(int i = 0; i < size; i++) { CsSrcImg.real = srcImg; } // Error Point!!! int res = HioTest(ref CsSrcImg[0], ref CsDstImg[0]); // Error Point!!! byte[] result = new byte[size]; for(int i = 0; i < size; i++) { result = (byte)CsDstImg.real; } dstImg = BitmapSource.Create(LoadBitMap.PixelWidth, LoadBitMap.PixelHeight, 300, 300, PixelFormats.Gray8, BitmapPalettes.Gray256, result, stride); DstCanvas.Source = dstImg; DstCanvas.Width = tabBorder.Width; DstCanvas.Height = tabBorder.Height; } private void Save_Click(object sender, RoutedEventArgs e) { SaveFileDialog saveDialog = new SaveFileDialog(); saveDialog.InitialDirectory = @"C:\Desktop"; saveDialog.Filter = "JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif"; saveDialog.Title = "Save an Image File"; saveDialog.ShowDialog(); string saveFilePath = saveDialog.FileName; using (var fileStream = new System.IO.FileStream(saveFilePath, System.IO.FileMode.Create)) { BitmapEncoder encoder = new JpegBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(dstImg)); encoder.Save(fileStream); fileStream.Close(); } } } }
========================================================================================
I created a TEST.dll (C language) using IPP for External library. I want to refer to TEST.dll in my wpf project and use it.
The tool used is "visual studio 2017" and the IPP version uses the latest version of 'compilers_and_libraries_2019.1.144'.
See the IPP documentation. The settings of the dll project,
- Debug / x64
- Add "ippsmt.lib, ippcoremt.lib “ for 'Additional Dependencies' ".
- Automatic "single-threaded DLL" setting.
- 'export .def' created.
- Add ippInit () to dllmain.cpp
- Referencing from C # . /clr setting
C # project
- Debug / x64
- unlock the loader
- Increase the reserve stack size
I set it up like this.
Other ippMalloc (), ippsAdddC_32f_I ()
The dll file I created using the above worked properly in my wpf project. However, TEST.dll containing ippiFFTGetSize_C_32fc () will result in an error "System.DllNotFoundException: Unable to load DLL 'TEST.dll'".
I want to know the cause or solution.
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
I guess you've used "copy-past" for your question and several lines of your problem description are broken. Could you provide the full description of your problem?
regards, Igor
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thank you for pointing out my wrong question. Using the first question on the Intel forum, it was a lot lacking. Sorry.
I wrote down all the code for the two projects I wrote.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Ku,
could you replace all references to IPP functions in your code with something like
printf("Hello world\n!");
?
What is happened in this case? just in order to be sure that something is wrong with IPP...
regards, Igor

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page