J'ai besoin de lier une dll C++ à mon programme WinCE C#. (dll scanner)
Comment faire ?
merci d'avance
J'ai besoin de lier une dll C++ à mon programme WinCE C#. (dll scanner)
Comment faire ?
merci d'avance
Vous devez utiliser l'interopérabilité pour appeler du code non géré.
using System.Runtime.InteropServices; // DllImport
public class Win32 {
[DllImport("User32.Dll")]
public static extern void SetWindowText(int h, String s);
}
Voici un article qui aborde le sujet en détail (ainsi que l'origine du code).
Une alternative à InterOp consiste à écrire une DLL C++ à l'aide des extensions CLR, qui agit comme une enveloppe de la DLL C++ traditionnelle. Cela vous permet de gérer des types inhabituels, par exemple des structures ou des classes personnalisées, si le Marshaling ne fonctionne pas. (D'après MSDN, il est possible d'étendre le support du Marshaling ( http://msdn.microsoft.com/en-us/library/bb531313.aspx ), mais je n'ai pas essayé personnellement, et selon ce que vous faites, cela peut représenter beaucoup de travail).
Par exemple, si vous voulez accéder à une DLL qui exporte une classe, vous pouvez avoir une DLL enveloppante qui possède une instance de la classe C++ et définit une classe .NET qui correspond à la classe C++. Par exemple, voici un extrait d'une DLL C++/CLR que nous utilisons pour rendre l'une de nos anciennes DLL C++ disponible dans .NET :
// This is the constructor for the CLR (managed) object
FileInf::FileInf()
{
// Create the C++ (unmanaged) object
m_pFileInf = gcnew DILib::FileInf();
}
// This is a managed interface which replicates the old
// unmanaged functionality
bool FileInf::IsDirectory()
{
return m_pFileInf->IsDirectory();
}
Je dirais que si InterOp fonctionne, il faut s'y tenir, mais je ne suis pas sûr que ce soit la meilleure façon de résoudre tous les problèmes d'interfaçage C++ / .NET, et ceci est une alternative.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.