Kan geen info van dll naar exe verzenden met WM_COPYDATA

Ik probeer een record van één DLL naar één EXE te verzenden.

De dll is een Outlook-invoegtoepassing die ik heb geschreven, de exe is mijn hoofdtoepassing.

Ik heb dit voorbeeld gebruikt om een ​​ record van exe naar exe, maar als ik hetzelfde probeer te doen van dll naar exe, werkt het niet.

Opmerking: open de link en daar vind je de code die ik gebruik. Die code is voor een EXE-zenderapplicatie en een EXE-zenderapplicatie. Dit werkt.

Als ik de zendercode in een dll plaats, werkt het voorbeeld niet meer.

Zou je een oplossing kunnen voorstellen?

2
Een record, ik heb de vraag bijgewerkt.
toegevoegd de auteur LaBracca, de bron
Oneerlijke downvotes omdat ik de vraag schreef met niet veel detail maar duidelijk: ik heb een link geplaatst naar het voorbeeld dat ik gebruikte, zodat je de code kunt vinden die ik gebruik. Dat voorbeeld is een EXE tot EXE. Ik heb zojuist DLL naar EXE uitgevoerd en ik kan de berichten niet verzenden. Omdat het enige verschil tussen het oorspronkelijke voorbeeld en wat ik heb gedaan EXE tot EXE is veranderd in DLL naar EXE, kan dit bij sommigen van u het idee voor de oplossing veroorzaken. Dit is de reden waarom mijn vraag met opzet zo was geschreven.
toegevoegd de auteur LaBracca, de bron
-1. Wat betekent "werkt niet"?
toegevoegd de auteur Rob Kennedy, de bron
U bent "niet in staat om de berichten te verzenden"? Bedoel je dat SendMessage mislukt? Als het mislukt, zou het een foutcode moeten retourneren. Heb je dat gecontroleerd? Weet je zeker dat je de juiste raamgreep hebt gevonden? U bent door uw code gestapt met de debugger en bij elke stap heeft elke berekening en functieaanroep precies de waarde opgeleverd waarvan u op voorhand wist dat deze zou opleveren? Totdat je dat hebt gedaan, ben je nog niet klaar met dit probleem. Wat verwachtte u dat er zou gebeuren en wat gebeurde er in plaats daarvan?
toegevoegd de auteur Rob Kennedy, de bron
Post de code die niet werkt. De recordverklaring is GEEN hulp.
toegevoegd de auteur Warren P, de bron
Wat is een TRecord ?
toegevoegd de auteur Andreas Rejbrand, de bron
U moet de code die de WM_COPYDATA verzendt, en de code die deze ontvangt, tonen. U moet ook uitleggen wat "het niet werkt" betekent.
toegevoegd de auteur David Heffernan, de bron
Ik zou beginnen met een eenvoudige string. Als u 'Hallo, wereld!' Niet kunt verzenden, is elke discussie over het record irrelevant.
toegevoegd de auteur Chris Thornton, de bron

1 antwoord

Ervan uitgaande dat je het kunt laten werken met een string (wat nog te bezien is), kun je simpelweg je record serialiseren naar een string (CSV, mogelijk met behulp van een rare delimiter zoals ~), verzenden als een string (PAnsiChar of PWideChar), dan de-seriales terug in de record aan de andere kant. Dit is niet zo elegant als wat je wilt, maar absoluut, positief, zal werken.

0
toegevoegd
bedankt voor het antwoord, maar mijn probleem is niet het verzenden van de gegevens, het is waarom het niet werkt vanaf een dll terwijl van een exe het werkt.
toegevoegd de auteur LaBracca, de bron
Record is ook vrij eenvoudig, met string [n] . Moet gewoon SizeOf() gebruiken en het zou goed moeten komen.
toegevoegd de auteur David Heffernan, de bron