Il y a plusieurs façons:
- Export the DLL functions et utiliser
DllImportAttribute
-P/Invoke dans la DLL.
- Si elle est une DLL COM, vous pouvez générer un Runtime Callable Wrapper via TLBIMP.exe
- Vous pouvez utiliser C++/CLI pour construire créer un assemblage .Net qui charge et appelle des méthodes sur la DLL native.
Pour répondre à vos préoccupations supplémentaires, oui, vous pouvez utiliser des pointeurs en C#. Si vous avez une fonction qui a un paramètre double*
, vous pouvez déclarer que C# comme ceci:
[DllImport("Your.DLL")]
private static extern unsafe void DoProcessing(double* data, int dataSize);
Vous devez vous assurer que vous cochez la case « Autoriser code unsafe » dans l'onglet de construction du projet C#, et après cela, vous pouvez utiliser des pointeurs sur le contenu de votre coeur. Cependant, notez que si je fournis ici la signature du pointeur, puisque vous êtes manifestement à l'aise avec les pointeurs, il existe d'autres signatures qui pourraient être plus sûres à utiliser et ne nécessiteraient pas la compilation de C# code. Le placier standard dans le CLR se chargera de la conversion d'un pointeur vers un tableau C#, à condition que vous donnez un peu d'un indice si la longueur est nécessaire:
[DllImport("Your.DLL")]
private static extern void DoProcessing(
[MarshalAs(UnmanagedType.LPArray, SizeParamIndex=1)] double[] data,
int dataSize);
Cette charge le placier d'utiliser le paramètre à l'index 1 (le 2ème paramètre) comme la taille du tableau de doubles pointé par le 1er paramètre. Cela vous permet d'éviter les pointeurs en C# et d'utiliser des types CLI sécurisés. Cependant, si vous aimez les pointeurs, mon conseil est de simplement les utiliser - le C# sera plus facile pour vous que d'avoir à comprendre comment écrire la signature de la méthode sans eux.
Pour plus de détails sur P/Invoke, reportez-vous à cette documentation: http://msdn.microsoft.com/en-us/library/aa288468(VS.71).aspx
Il serait utile que vous incluiez la signature de l'une des méthodes que vous souhaitez appeler à partir de C#. –