J'ai été gaven un fichier dll C++, un fichier lib
et un fichier d'en-tête. Je dois les appeler depuis mon application C#.C# appelez un dll C++ get EntryPointNotFoundException
ressemble à ceci:
class Clog ;
class EXPORT_MACRO NB_DPSM
{
private:
string sFileNameToAnalyze ;
Clog *pLog ;
void write2log(string text) ;
public:
NB_DPSM(void);
~NB_DPSM(void);
void setFileNameToAnalyze(string FileNameToAnalyze) ;
int WriteGenbenchData(string& message) ;
};
Dans mon code C#, je les code:
internal ReturnStatus correctDataDLL(string rawDataFileName)
{
if (rawDataFileName == null || rawDataFileName.Length <= 0)
{
return ReturnStatus.Return_CannotFindFile;
}
else
{
setFileNameToAnalyze(rawDataFileName);
}
string msg = "";
int returnVal = WriteGenbenchData(ref msg);
return ReturnStatus.Return_Success;
}
[DllImport("..\\..\\thirdParty\\cogs\\NB_DPSM.dll")]
public static extern void setFileNameToAnalyze(string fileName);
[DllImport("..\\..\\thirdParty\\cogs\\NB_DPSM.dll")]
public static extern int WriteGenbenchData(ref string message);
Je EntryPointNotFoundException
obtenu à la déclaration setFileNameToAnalyze(rawDataFileName);
.
Peu de questions:
dois-je ajouter ce fichier
lib
dans quelque part de mon projet C#? Comment? Ai-je besoin d'ajouter le fichier d'en-tête dans mon projet C#?Comment? (aucune erreur de compilation pour l'instant)
Je voudrais supprimer ces
"..\\..\\thirdParty\\cogs\\"
chemin de code. comment ça?comment faire pour monter de cela
EntryPointNotFoundException
?
grâce,
pourquoi avoir besoin du bloc "extern" C "{}" ? – 5YrsLaterDBA
@ 5YrsLaterDBA: Pour éviter [name mangling] (http://en.wikipedia.org/wiki/Name_mangling#Name_mangling_in_C.2B.2B). – SLaks