2011-06-06 23 views
9

से मैं (regsvr32) नेट से pHash उपयोग करने के लिए कोशिश कर रहा हूँpHash का उपयोग करते हुए नेट

पहली बात मैंने कोशिश की रजिस्टर करने के लिए था phash.dll और पूछा कि सभी की here दूसरा, मैं जैसा कि नीचे दिखाया DllImport का उपयोग कर आयात करने के लिए कोशिश कर रहा था ।

[DllImport(@".\Com\pHash.dll")] 
    public static extern int ph_dct_imagehash(
     [MarshalAs(UnmanagedType.LPStr)] string file, 
     UInt64 hash); 

लेकिन जब मैं चलाने के समय के दौरान उपरोक्त विधि तक पहुँचने का प्रयास, त्रुटि संदेश निम्न दिखाता है।

Unable to find an entry point named 'ph_dct_imagehash' in DLL '.\Com\pHash.dll'. 

क्या "प्रवेश बिंदु" का अर्थ है और क्यों मैं त्रुटि हो रही है करता है?

धन्यवाद।

FYI करें - यहाँ phash.org पर पूर्ण स्रोत कोड

using System; 
using System.Diagnostics; 
using System.Runtime.InteropServices; 
using System.Windows; 

namespace DetectSimilarImages 
{ 
    public partial class MainWindow : Window 
    { 
     [DllImport(@".\Com\pHash.dll")] 
     public static extern int ph_dct_imagehash(
      [MarshalAs(UnmanagedType.LPStr)] string file, 
      UInt64 hash); 


     public MainWindow() 
     { 
      InitializeComponent(); 

      Loaded += MainWindow_Loaded; 
     } 

     void MainWindow_Loaded(object sender, RoutedEventArgs e) 
     { 
      try 
      { 
       UInt64 hash1 = 0, hash2 = 0; 
       string firstImage = @"C:\Users\dance2die\Pictures\2011-01-23\177.JPG"; 
       string secondImage = @"C:\Users\dance2die\Pictures\2011-01-23\176.JPG"; 
       ph_dct_imagehash(firstImage, hash1); 
       ph_dct_imagehash(secondImage, hash2); 

       Debug.WriteLine(hash1); 
       Debug.WriteLine(hash2); 
      } 
      catch (Exception ex) 
      { 

      } 
     } 


    } 
} 
+0

आप DLL खुद के संकलन किया था? यदि हां, तो क्या आपने प्रासंगिक फ़ंक्शन को उचित रूप से निर्यात करने का ख्याल रखा है? –

+0

@ कोनराड: मैंने स्रोत को स्वयं संकलित किया है, लेकिन मैंने "प्रासंगिक कार्यों को सही ढंग से निर्यात करने" पर जो कहा है, उससे मैं खो गया हूं क्योंकि मैं सी ++ से परिचित नहीं हूं ... – Sung

+1

@Sung फिर फिक्स आसान है: * नहीं * पुस्तकालय संकलित करें। Precompiled बाइनरी का प्रयोग करें। दुर्भाग्यवश, –

उत्तर

13

(7/2011) के रूप में वर्तमान Windows स्रोत कोड परियोजना DLL से ph_ API कॉल निर्यात करने के लिए प्रतीत नहीं होता है। आप इन तो जैसे pHash.h में पंक्ति के आरंभ में __declspec (dllexport) द्वारा अपने आप को जोड़ने की आवश्यकता होगी: का उपयोग कर

__declspec(dllexport) int ph_dct_imagehash(const char* file,ulong64 &hash); 

फिर आप निर्यात शो DLL में देखना चाहिए dumpbin

dumpbin /EXPORTS pHash.dll 
... 
Dump of file pHash.dll 
... 
      1 0 00047A14 closedir = @ILT+2575(_closedir) 
      2 1 00047398 opendir = @ILT+915(_opendir) 
      3 2 00047A4B ph_dct_imagehash = @ILT+2630(_ph_dct_imagehash) 
      4 3 000477B2 readdir = @ILT+1965(_readdir) 
      5 4 00047A00 rewinddir = @ILT+2555(_rewinddir) 
      6 5 000477AD seekdir = @ILT+1960(_seekdir) 
      7 6 00047AFA telldir = @ILT+2805(_telldir) 

अब आप इस कॉल का उपयोग सी # से कर सकते हैं।

लेकिन ...

मैं CImg कोड जब मैं इस फोन करने की कोशिश में एक दुर्घटना हो रही है, तो ऐसा लगता है वहाँ कुछ more work to do here ...

+0

यह मेरे लिए png_read_info() में क्रैश होता है, लेकिन ऐसा लगता है कि जेपीजी – rupello

+2

पीएनजी के लिए कुछ अतिरिक्त की आवश्यकता है चरण: http://stackoverflow.com/questions/4001816/loading-pngs-with-cimg – rupello

+0

मैं डंपबिन करने के बाद '3 2 00047A4B ph_dct_imagehash = @ ILT + 2630 (_ph_dct_imagehash)' देखने में सक्षम था लेकिन मैं अभी भी फ़ैश dllimport नहीं कर सकता .dll। – Sung

संबंधित मुद्दे