J'ai une classe C# que j'ai rendue ComVisible afin qu'elle puisse être utilisée dans une DLL C++ non managée. La classe C# est défini comme ceci:Impossible de se débarrasser de l'objet COM C#
public interface IFSFunction
{
double GetProcessTime();
}
public class Functions : IFSFunction
{
// Initialization here
// Interface function
public double GetProcessTime()
{
// Do stuff - return a value
}
}
Puis, dans mon C++ DLL Je reçois une référence à la classe C# comme ceci:
IFSFunctionPtr pIFuncs;
pIFuncs.CreateInstance(__uuidof(Functions));
double proctime = pIFuncs->GetProcessTime()
pIFuncs.Detach()->Release();
Cela appelle les fonctions C# très bien, mais il doesn ne semblent pas nettoyer correctement afterwords. Il semble toujours y avoir une référence à ma classe C# qui traîne. Comment puis-je m'assurer que mon objet C# COM est complètement parti?
Comment savez-vous qu'il existe encore une référence? Quel est le symptôme que vous voyez? –
J'ai mis ce commentaire sur une réponse ci-dessous, aussi, mais ici c'est encore: Voici ma configuration globale: Application-> C++ DLL-> C# COM DLL. Mon application a une fonctionnalité qui me permet de déconnecter la DLL C++ afin que je puisse la recompiler sans avoir à fermer l'application. Lorsque je fais cela, je peux recompiler la DLL C++, mais pas la DLL C#. Je reçois le message suivant: "Le processus ne peut pas accéder au fichier '.. \ .. \ CSFunctions.dll' car il est utilisé par un autre processus." Si je ferme mon application, cette erreur disparaît et je peux construire par DLL. –