Je crée une DLL "Plugin" pour un EXE. Le fichier EXE appelle une fonction dans la DLL avec un objet en tant que paramètre et part de là.Accès à la mémoire protégée en C# via COM interop
Tout fonctionne bien et dandy jusqu'à ce que je le divise en un nouveau fil. Cette erreur se produit
Tentative de lecture ou d'écriture de la mémoire protégée . C'est souvent une indication que l'autre mémoire est corrompue.
lors de l'exécution de ce code sur l'objet dans le nouveau thread:
protected object GetPropertyValue(object obj, string PropertyName)
{
return obj.GetType().InvokeMember(PropertyName, BindingFlags.GetProperty, null, obj, new object[] { });
}
ci-dessus tente d'accéder à une propriété sur un objet COM. Changer la fonction en 'public' ne l'affecte pas. Le code fonctionne très bien mais si je n'utilise qu'un seul thread.
Ce qui se passe est clair: Le nouveau thread n'a pas accès à la variable dans le fichier EXE. Comment puis-je réparer cela? Ne pas utiliser un thread n'est pas une option viable.
apprécierais toute aide
Je n'ai aucun contrôle sur l'objet COM – Lynxy
Mais vous avez le contrôle sur le thread qui l'appelle. S'il s'agit d'un objet com STA, vous devez y accéder depuis le thread qui le possède (le thread où il a été créé). –
Vous pouvez également ajouter la définition du thread BG pour utiliser le STA lorsque vous le créez. Si vous faites cela, je crois que le CLR gérera la distribution de thread pour vous (en utilisant la boucle de message). Pour cela appelez thread.SetAppartmemtState –