Nous avons une méthode déclarée dans un fichier IDL comme ceci:C# implemenation de déclaration IDL avec un INT_PTR
[id(7), helpstring("method SomeFunction")] HRESULT SomeFunction([in] INT_PTR windowHandle, [out, retval] VARIANT_BOOL* dlgResult);
Nous la mise en œuvre en C# avec cette méthode:
public bool SomeFunction(int windowHandle)
Ce fonctionne bien lors de la construction de 32 bits, mais quand nous construisons x64, les types ne correspondent pas car l'idl recherche une valeur de 64 bits et le C# attend une valeur de 32 bits.
L'utilisation de IntPtr dans le C# ne fonctionne pas car le code nécessite un long ou un int dans C#.
Y at-il un type que je peux utiliser dans la méthode C# qui sera compilé à long ou int selon la plate-forme? Je préfère ne pas avoir à dupliquer le code en ayant la fonction deux fois, et je ne suis pas sûr que nous pouvons changer l'IDL pour utiliser simplement Int64 en raison de la rétrocompatibilité.
Toute aide serait appréciée. Merci
votre code au fond semble que cela fonctionnera, mais c'est tout le code C#. Le problème que j'ai est la méthode est déclarée dans un fichier IDL qui provoque l'erreur avec le code C# avec: csfile.cs (37): 'csnamespace.csproject.csfile' n'implémente pas le membre d'interface 'cpplib.Icppinterface.SomeFunction (long) 'J'obtiens cette erreur lors de la compilation de x64 si j'utilise int et int ou un IntPtr dans la méthode C#. Si j'utilise un IntPtr, il ne compile pas non plus pour 32 bits parce que la signature recherche spécifiquement un int. –
Vous avez raison, ma solution ne fonctionnera pas pour vous; Je n'ai pas lu assez attentivement. Le problème est exactement que vous utilisez INT_PTR dans l'IDL, et je suppose que vous utilisez un tel mécanisme pour la compatibilité COM. Vous pouvez voir [cette référence MSDN] (http://msdn.microsoft.com/en-us/library/ms810720.aspx) pour une discussion du problème du point de vue IDL. Oui, il a 12 ans, mais je pense que c'est toujours pertinent pour votre situation, en particulier la section consacrée à INT_PTR et LONG_PTR. – JimEvans