Bonjour
je suis désolé de faire un doublon (j'ai déjà évoqué le problème dans la section F# mais la discussion n'a pas abouti car ce forum est peu fréquenté et LLB n'a malheureusement pas l'air présent actuellement).
mon problème :
J'ai 2 Dll d'interfaçage SWI-Prolog <-> C# qui fonctionnent très bien, une en 32 l'autre en 64 bits.
Par contre lorsque j' utilise avec F# la dll 32 bits ça fonctionne mais avec la Dll 64 bits, l'espace des noms n'est pas reconnu.
J'ai eu accès au code des dll.
La seule différence entre les versions 32 et 64 est la définition de tailles
et d'écriture :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 #if _PL_X64 #warning _PL_X64 is defined int size_of_IOSTREAM = 232; int offset_to_poninter_of_IOFUNCTIONS = 104; int size_of_pointer = 8; #else #warning _PL_X64 is NOT defined int size_of_IOSTREAM = 144; int offset_to_poninter_of_IOFUNCTIONS = 72; int size_of_pointer = 4; #endif
Lorsque je compile pour la plate-forme x86 sans définir _PL_X64 l'espace des noms dans mon programme F# est reconnu, lorsque je compile pour la plateforme x64 en définissant _PL_X64 l'espace des noms n'est plus reconnu Je rappele que ça fonctionne bien par contre avec C#.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 #if _PL_X64 Marshal.WriteIntPtr(new IntPtr(function_array_out.ToInt64() + (size_of_pointer * (int)functionType)), callbackFunctionPtr); #else Marshal.WriteIntPtr(new IntPtr(function_array_out.ToInt32() + (size_of_pointer * (int)functionType)), callbackFunctionPtr); #endif
Où est le problème ?
Merci.
Partager