| | | Bergers Holzfensterbau (MegaCAD) |
Autor(20117)
|
Thema: C-Schnittstelle - Macronamen ausgeben (1253 mal gelesen)
|
22Grad Mitglied Maschinenbautechniker
Beiträge: 2 Registriert: 01.11.2011 Win XP Prof. SP3 MegaCAD 3D 2011
|
erstellt am: 01. Nov. 2011 03:30 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, seit 4 Jahren schaue ich regelmäßig im Forum vorbei (als stiller Leser) und habe auf meine Fragen immer eine Antwort gefunden. Doch jetzt beschäftige ich mich experimentell mit der C-Schnittstelle und komme nicht weiter. Liegt wahrscheinlich an meinen mangelnden bzw. nicht vorhandenen C-Kenntnissen , da ich eher php etc. programmiere. Doch nun zu meinem Code (Visual C++ 2010 Express):
Code:
#include "stdafx.h" #include "std.h" #include "megatyp.h" #include "megacad.h"/***********************************************************************/ char edta[32000];// Puffer fr variable Daten short lcnt; /***********************************************************************/ short ModEl(void *para) { t_entity *ent; ent = (t_entity*) para; if(ent->type == E_MACRO) { lcnt++; if(ent->data.mac.name) { //Ausgabe des Baugruppennamens Message("Benennung:",ent->data.mac.name,NULL,NULL,"OK",3); } } return(CONTINUE_LOOP); } /***********************************************************************/ extern "C" short MegaMain(char *file, char *args) { char buf[255]; t_entity ent; t_edta * edta = GetVarPtr(); //für C-Interpreter in T_EDTA oder void ändern //uint edtaMax = GetMaxDataSize(); lcnt = 0; //Über alle Macros laufen und Callback MacroLoop((1<<E_MACRO),0L,0L,ModEl,&ent,edta,NULL,sizeof(edta)); //Änderungen sichern if(lcnt>0)savecount(); //Ausgabe der Macroanzahl sprintf_s(buf, 255, "%d Macros",lcnt); Message(buf,NULL,NULL,NULL,"OK",3); return(0); } /***********************************************************************/
Die Datei enthält 8 exklusive Macros, aber mir wird immer der gleiche "String" (anscheinend codiert) angezeigt. (siehe Abb.)Wer findet den Fehler und kann mir weiter helfen? Vielen Dank! LG Hendrik Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Knoop Mitglied Dipl.-Ing. masch.
Beiträge: 409 Registriert: 09.10.2000
|
erstellt am: 01. Nov. 2011 10:37 <-- editieren / zitieren --> Unities abgeben: Nur für 22Grad
Hallo, pass doch mal die Zeile mit Macroloop wie folgt an: MacroLoop((1<<E_MACRO),0L,0L,ModEl,&ent,GetVarPtr(),NULL,VD_CNT); Ich denke dann sollte es funktionieren. Du hast global den edta als char mit 32000 Zeichnen definiert. Aber lokal: t_edta * edta = GetVarPtr(); Das passt nicht zusammen... Viele Grüße
Bernd ------------------ -Megatech Software GmbH- -Niederlassung Nord- Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
22Grad Mitglied Maschinenbautechniker
Beiträge: 2 Registriert: 01.11.2011 Win XP Prof. SP3 MegaCAD 3D 2011
|
erstellt am: 01. Nov. 2011 18:37 <-- editieren / zitieren --> Unities abgeben:
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|