Existe-t-il un exemple simple de comment passer des messages de rappel non sécurisé au code managé?C#. Comment passer un message de rappel non sécurisé au code managé?
J'ai une DLL propriétaire qui reçoit des messages emballés dans des structures et tout vient à une fonction de rappel.
L'exemple d'utilisation est le suivant, mais il appelle également un code non sécurisé. Je veux passer les messages dans mon application qui est tout le code managé.
* P.S. Je n'ai aucune expérience dans l'interopérabilité ou le code dangereux. J'avais l'habitude de développer en C++ il y a 8 ans mais je me souviens très peu de ces temps cauchemardesques :)
P.P.S. L'application est chargée comme l'enfer, les développeurs d'origine affirment qu'il traite les messages 2MIL par seconde .. Je besoin d'une solution plus efficace. *
static unsafe int OnCoreCallback(IntPtr pSys, IntPtr pMsg)
{
// Alias structure pointers to the pointers passed in.
CoreSystem* pCoreSys = (CoreSystem*)pSys;
CoreMessage* pCoreMsg = (CoreMessage*)pMsg;
// message handler function.
if (pCoreMsg->MessageType == Core.MSG_STATUS)
OnCoreStatus(pCoreSys, pCoreMsg);
// Continue running
return (int)Core.CALLBACKRETURN_CONTINUE;
}
Merci.
Que va faire le code managé avec les messages? Quel genre de données sont les messages? Cordes? Ou des pointeurs qui seront passés dans le code non géré/non sécurisé? La réponse dépend complètement de choses comme ça. – snarf
Je vois .. les messages ne reviendront pas à un code non géré à coup sûr ... Ce que j'ai fait jusqu'ici - J'ai ajouté un peu de code non géré à partir d'exemples API dans mon application WPF * travail et j'envelopper chaque message dans une structure que je déjà utiliser dans WPF et le repousser à une fenêtre ... Le problème est que quand j'appelle this.Dispatcher.BeginInvoke (nouvelle Action (() => {OnDataReceived (données);}) ... Je ne me lève jamais dans Méthode OnDataReceived J'ai essayé d'y mettre un point d'arrêt et il n'a jamais été touché ... Je suis coincé ... Note MyStruct et Dispatcher et OnDataReceived - tout fonctionne quand je l'appelle à partir de threads gérés –
PS MyStruct est petit 32 bit struct - all int, uint, long .. Aucun type de ref du tout, pas même de chaîne. –