J'ai une DLL qui provient d'un tiers, qui a été écrit en C++. Voici quelques informations qui provient de la documentation dll:"Impossible de trouver un point d'entrée nommé [fonction] dans dll" (conversion de type C++ à C#)
//start documentation
RECO_DATA{
wchar_t Surname[200];
wchar_t Firstname[200];
}
Description: structure de données pour recevoir le résultat de la fonction. Tout le résultat de la fonction sera enregistré en tant qu'Unicode (UTF-8).
Méthode:
bool recoCHN_P_Name(char *imgPath,RECO_DATA *o_data);
entrée:
char * imgPath
le chemin complet de l'emplacement d'image pour cette fonction reconnaître
RECO_DATA * o_data
objet de données pour recevoir la fonction résultat . Retour de fonction: Vrai si succès, sinon faux retournera. J'essaie d'appeler le recoCHN_P_Name de mon application C#. À cette fin, je suis venu avec ce code:
Le code pour importer les dll:
public class cnOCRsdk
{
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct RECO_DATA{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=200)]
public string FirstName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 200)]
public string Surname;
}
[DllImport(@"cnOCRsdk.dll", EntryPoint="recoCHN_P_Name")]
public static extern bool recoCHN_P_Name(byte[] imgPath, RECO_DATA o_data);
}
Le code pour appeler la fonction:
cnOCRsdk.RECO_DATA recoData = new cnOCRsdk.RECO_DATA();
string path = @"C:\WINDOWS\twain_32\twainrgb.bmp";
System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
byte[] bytes = encoding.GetBytes(path);
bool res = cnOCRsdk.recoCHN_P_Name(bytes, recoData);
Et l'erreur que je reçois "" Impossible de trouver un point d'entrée nommé 'recoCHN_P_Name' dans la DLL 'cnOCRsdk.dll'. " Je me doute que j'ai une erreur dans la conversion d'un type de C++ en C#. Mais où exactement ... ?
J'ai une ligne dans la sortie qui dit « 14 D 00007B40 recoCHN_P_Name @ CcnOCRsdk @@ QAE_NPADPAURECO_DATA @@@ Z " qu'est-ce que cela me dit? – Evgeny
Voir http://www.kegel.com/mangle.html pour une explication détaillée sur la façon de le décrypter. Assurez-vous que les types de données sont corrects. –
Cela m'a vraiment indiqué la bonne direction, merci – Evgeny