2009-03-09 6 views
0

J'essaie d'écrire un composant simple qui vous permettra d'intégrer une ou plusieurs surfaces de rendu SDL sur une fenêtre Delphi, en utilisant les API SDL 1.3. Il compilera et installera juste bien, mais quand j'essaye d'employer le composant dans le concepteur de forme, il soulève AVs quand j'essaye d'accéder à ses propriétés dans l'inspecteur d'objet, sauvez le formulaire, ou supprimez le composant, et en plaçant un sur un forme alors en essayant de courir donne une erreur de linker: il ne peut apparemment pas lire correctement le DFM pour une raison quelconque. La DLL se trouve au http://www.libsdl.org/tmp/SDL-1.3-dll.zip et le code source de mon composant peut être téléchargé here. SDL.pas est un fichier d'en-tête JEDI-SDL; le reste est mon propre code.Pourquoi mon composant personnalisé génère-t-il des AV dans l'EDI?

Je ne vois aucune raison de soulever des AV dans le concepteur de formulaires. Si je crée dynamiquement le contrôle à l'exécution, je n'ai aucun problème de stabilité. Quelqu'un peut-il jeter un coup d'oeil à ceci et peut-être fournir quelques commentaires qui pourraient m'aider à éclaircir?

Répondre

14

Vous pouvez le déboguer vous-même. Ouvrez le projet de package qui contient votre composant. Ensuite, allez dans Run | Parameters et entrez l'IDE lui-même en tant qu'application hôte. Exécutez l'IDE à partir de l'IDE. Puis répétez vos étapes pour reproduire l'AV, et l'IDE devrait s'arrêter et vous montrer où les choses échouent. Vous pouvez utiliser les techniques de débogage normales à partir de là.

+0

OK. Le problème disparaît lorsque je supprime la propriété Flags de la section publiée. L'IDE s'étouffe lorsqu'il essaie de rechercher le RTTI pour la définition Set sous-jacente. Je cours Delphi 2009 avec toutes les mises à jour installées. C'est le deuxième cas que j'ai trouvé de mauvais RTTI en '09. Je vais le mettre au QC. –

+0

Comment l'ensemble est-il déclaré? Combien d'éléments dans l'ensemble? Vous ne pouvez publier que des ensembles ne contenant que 32 éléments. –

+0

TSdlWindowFlags = ensemble de (sdlwFullscreen, sdlwOpenGl, sdlwShown, sdlwBorderless, sdlwResizable, sdlwMinimized, sdlwMaximisé, sdlwInputGrabbed, dslwInputFocus, sdlwMouseFocus, sdwlForeign, sdlwForce32 = 31); 12 éléments dans l'énumération, conçu pour que je puisse le passer à une routine C qui attend un "int". –

Questions connexes