2010-11-19 5 views
1

J'ai essayé d'utiliser la bibliothèque UnderC (donne la fonctionnalité de script C++) dans un programme dans Borland C++ Builder (sous Windows XP), mais cela me pose des problèmes que je ne suis pas sûr de savoir réparer. D'autres problèmes sont apparus, j'ai trouvé des solutions en ligne, mais celle-ci est difficile à décrire avec des mots facilement consultables. J'ai ajouté (au chemin de recherche du compilateur) le dossier qui contient les fichiers nécessaires - "ucdl.h" et "ucc12.lib" (C++ m'a dit que je devais convertir le fichier .lib de coff à omf, donc je l'ai fait; ça a cessé de me donner cette erreur). J'ai ajouté la ligne #include "ucdl.h", et maintenant il ne me donne aucun message d'erreur - mais quand je l'exécute, la première chose à faire est d'arrêter au milieu de la fenêtre de débogage du processeur, comme si j'avais définir un point d'arrêt. Il n'y a pas de points de rupture. Il ne donne aucune raison pour expliquer pourquoi il s'est arrêté. Si je l'ai continuer à courir, il me donne alors une erreur de violation d'accès. Une chose qui peut être utile ou non - si, dans le débogueur cpu, je sauvegarde une ligne à partir de laquelle elle s'est arrêtée, elle réorganise l'assemblage visible, et la ligne sur laquelle elle se trouve est alors affichée pour commencer un octet plus tôt. Comme le code court d'où elle arrête, pour autant que je peux dire, pour arriver là où il se bloque, il va (dans le code de montage) de
___CRTL_VCL_Init dans
___CRTL_VCL_Sharemem dans
__roundToInt64(), à l'adresse suivante ligne:
00403204 FF25387B4000 jmp dword ptr [00407b38 $]Bibliothèque ajoutée; Borland C++ Builder s'arrête sans raison

Cette ligne est précédée et suivie par de nombreuses lignes similaires, pointant vers des emplacements de mémoire adjacents. L'adresse contenue par le pointeur est 0x00009B47, ce qui semble être hors de la portée du programme ou autre, et donne donc une erreur. Je ne suis pas sûr de savoir comment résoudre ce problème, car il ne me donne pas d'erreurs quand il s'arrête (vraiment bizarre), il n'y a pas de code source associé à l'endroit où il donne l'erreur, et il semble donner l'erreur dans un Zone d'initialisation VCL, et je ne sais pas comment l'ajout d'une bibliothèque provoquerait cela. Des idées, quelqu'un? Oh, aussi, il semble s'arrêter juste après le chargement de borlndmm.dll, alors qu'un programme normal continue à charger plus de DLL. Le journal des événements montre:

Thread Start: Thread ID: 3028. Process ManualEventLogger.exe (4932) 
Process Start: C:\Documents and Settings\Matthew\My Documents\Borland Studio Projects\Cantrips\Manual Event Logger\Debug_Build\ManualEventLogger.exe. Base Address: $00400000.  Process ManualEventLogger.exe (4932) 
Module Load: ManualEventLogger.exe. Has Debug Info. Base Address: $00400000. Process ManualEventLogger.exe (4932) 
Module Load: ntdll.dll. No Debug Info. Base Address: $7C900000. Process ManualEventLogger.exe (4932) 
Module Load: KERNEL32.dll. No Debug Info. Base Address: $7C800000. Process ManualEventLogger.exe (4932) 
Module Load: vcl100.bpl. No Debug Info. Base Address: $52000000. Process ManualEventLogger.exe (4932) 
Module Load: rtl100.bpl. No Debug Info. Base Address: $51F20000. Process ManualEventLogger.exe (4932) 
Module Load: OLEAUT32.dll. No Debug Info. Base Address: $77120000. Process ManualEventLogger.exe (4932) 
Module Load: ADVAPI32.dll. No Debug Info. Base Address: $77DD0000. Process ManualEventLogger.exe (4932) 
Module Load: RPCRT4.dll. No Debug Info. Base Address: $77E70000. Process ManualEventLogger.exe (4932) 
Module Load: Secur32.dll. No Debug Info. Base Address: $77FE0000. Process ManualEventLogger.exe (4932) 
Module Load: GDI32.dll. No Debug Info. Base Address: $77F10000. Process ManualEventLogger.exe (4932) 
Module Load: USER32.dll. No Debug Info. Base Address: $7E410000. Process ManualEventLogger.exe (4932) 
Module Load: msvcrt.dll. No Debug Info. Base Address: $77C10000. Process ManualEventLogger.exe (4932) 
Module Load: ole32.dll. No Debug Info. Base Address: $774E0000. Process ManualEventLogger.exe (4932) 
Module Load: VERSION.dll. No Debug Info. Base Address: $77C00000. Process ManualEventLogger.exe (4932) 
Module Load: MPR.dll. No Debug Info. Base Address: $71B20000. Process ManualEventLogger.exe (4932) 
Module Load: IMAGEHLP.dll. No Debug Info. Base Address: $76C90000. Process ManualEventLogger.exe (4932) 
Module Load: WSOCK32.dll. No Debug Info. Base Address: $71AD0000. Process ManualEventLogger.exe (4932) 
Module Load: WS2_32.dll. No Debug Info. Base Address: $71AB0000. Process ManualEventLogger.exe (4932) 
Module Load: WS2HELP.dll. No Debug Info. Base Address: $71AA0000. Process ManualEventLogger.exe (4932) 
Module Load: OLEACC.dll. No Debug Info. Base Address: $74C80000. Process ManualEventLogger.exe (4932) 
Module Load: MSVCP60.dll. No Debug Info. Base Address: $76080000. Process ManualEventLogger.exe (4932) 
Module Load: MSIMG32.dll. No Debug Info. Base Address: $76380000. Process ManualEventLogger.exe (4932) 
Module Load: COMCTL32.dll. No Debug Info. Base Address: $5D090000. Process ManualEventLogger.exe (4932) 
Module Load: SHELL32.dll. No Debug Info. Base Address: $7C9C0000. Process ManualEventLogger.exe (4932) 
Module Load: SHLWAPI.dll. No Debug Info. Base Address: $77F60000. Process ManualEventLogger.exe (4932) 
Module Load: WINSPOOL.DRV. No Debug Info. Base Address: $73000000. Process ManualEventLogger.exe (4932) 
Module Load: comdlg32.dll. No Debug Info. Base Address: $763B0000. Process ManualEventLogger.exe (4932) 
Module Load: oledlg.dll. No Debug Info. Base Address: $7DF70000. Process ManualEventLogger.exe (4932) 
Module Load: borlndmm.dll. No Debug Info. Base Address: $21670000. Process ManualEventLogger.exe (4932) 

Répondre

0

Ok ... Je déconner avec les paramètres, et j'ai utilisé « ajouter un fichier à votre projet » sur ucc12.dll (par opposition à .lib), puis vérifié " copier local ", qui copie le fichier dans le répertoire local du programme ... et le programme a bien fonctionné cette fois. Donc, ça marche maintenant ... mais je n'ai toujours aucune idée de pourquoi cela a fonctionné, ou ce qui causait exactement le comportement très étrange avant. Si quelqu'un a des idées à ce sujet, je serais curieux de savoir. Mais au moins, le programme fonctionne, maintenant.

Questions connexes