Announcement

Collapse
No announcement yet.

Zugriffsfehler bei ResourceEntry-Abfrage

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Zugriffsfehler bei ResourceEntry-Abfrage

    Hallo,

    Ich möchte mit einem Wizard innerhalb der IDE Projektinformationen auslesen. Bei der Abfrage von
    Resource-Einträgen bekomme ich einen Zugriffsfehler. Kann mir jemand weiterhelfen?

    ########### code #####################

    if Assigned(IProject) then
    begin
    IProjectResource:=GetProjectResource(IProject);
    if Assigned(IProjectResource) then
    begin
    ProjektInfoDlg.Memo1.Lines.Add(
    Format('GetEntryCount = %d ', [IProjectResource.GetEntryCount]));
    II := 0;
    for II:=0 to IProjectResource.GetEntryCount-1 do
    begin
    IResourceEntry:=IProjectResource.GetEntry(II);
    if Assigned(IResourceEntry) then
    begin
    if IResourceEntry.GetHeaderValue(hvDataVersion,VI) then
    begin
    ProjektInfoDlg.Memo1.Lines.Add(
    Format('hvDataVersion = %d ',[VI]));
    end;
    VI := IResourceEntry.DataSize;
    ProjektInfoDlg.Memo1.Lines.Add(
    Format('Datasize = %d ',[VI]));
    AS1:=String(IResourceEntry.GetResourceName);//Zugriffsfehler
    AS1:=StrPas(IResourceEntry.GetResourceName);//Zugriffsfehler
    ProjektInfoDlg.Memo1.Lines.Add(AS1);
    end;
    end;
    end;
    end;

    ############# code ende #################

  • #2
    schau mal bitte der wert von getresourcename vieleicht nur einen Zeiger zurückgibt

    Gruß Andrea

    Comment


    • #3
      vieleicht ist es auch sinnvoll
      IResourceEntry.GetResourceName erst mal einer pchar variablen
      zuzuordnen und dann die Typumwandlung zu probieren.
      das mit String(IResourceEntry.GetResourceName) sollte sowieso nicht funktionieren.

      Gruß Andrea

      Comment


      • #4
        Hallo Andreas,

        danke für die schnelle Antwort. Ich habe jetzt die Lösung gefunden. Ich muss mit LongRec(APC1).Hi zunächst kontrollieren, ob der Rückgabewert eventuell ein Integer ist.

        APC1:PAnsiChar;
        AS1:String;

        {code ausschnitt}

        APC1:=IResourceEntry.GetResourceName;
        if Assigned(APC1) then
        begin
        if LongRec(APC1).Hi = 0 then
        begin
        AS1:=Format('#%d',[Integer(APC1)]);
        MessageBox(0,PChar(AS1),'Info',MB_OK);
        end
        else
        begin
        MessageBox(0,APC1,'Hallo und K.O',MB_OK)
        end;
        end

        {code ausschnitt}

        mfg Steffe

        Comment


        • #5
          Hallo Steffen,

          ich benutze Delphi 2005 und versuche derzeit auf die Schnittstelle IOTAProjectResource zugreifen zu können. Die Beispiele, welche ich im Internet gefunden habe, funktionieren nicht. Da Du in Deinem Beispiel auf die Resourcen zugreifst, habe ich die Hoffnung, das es möglich ist. Kannst Du mit zeigen, wie die von Dir verwendete Funktion "GetProjectResource(IProject)" aussieht und verwendest Du auch Delphi 2005?

          MFG
          Andr&#233

          Comment


          • #6
            Hallo Andre,

            ich besitze Delphi 7. Da die Schnittstellen zur OTA von Version zu Version erweitert wurden, kann ich nicht sagen, ob alles, was unter Delphi7 genau so bei Delphi2005 funktioniert.

            Hilfreiche Internetseiten:
            etwas älter, hilft aber zum Verständnis
            http://www.gexperts.org/opentools/
            aktueller:
            http://www.mustangpeak.net/

            Ich bin folgendermaßen vorgegangen:
            ermitteln der aktuellen Projectgroup
            ermitteln des aktuellen Projects

            danach
            ###### code ##########
            <listing>
            if Assigned(IProject) then
            begin
            IProjectResource:=GetProjectResource(IProject);
            if Assigned(IProjectResource) then
            begin
            ProjektInfoDlg.Memo1.Lines.Add(
            Format('GetEntryCount = %d ', [IProjectResource.GetEntryCount]));
            II := 0;
            APC1:=nil;
            New(APC1);
            for II:=0 to IProjectResource.GetEntryCount-1 do
            begin
            IResourceEntry:=IProjectResource.GetEntry(II);
            if Assigned(IResourceEntry) then
            begin
            if IResourceEntry.GetHeaderValue(hvDataVersion,VI) then
            begin
            ProjektInfoDlg.Memo1.Lines.Add(
            Format('hvDataVersion = %d ',[VI]));
            end;
            VI := IResourceEntry.DataSize;
            ProjektInfoDlg.Memo1.Lines.Add(
            Format('Datasize = %d ',[VI]));

            APC1:=IResourceEntry.GetResourceName;
            if Assigned(APC1) then
            begin
            if LongRec(APC1).Hi = 0 then
            begin
            AS1:=Format('#%d',[Integer(APC1)]);
            MessageBox(0,PChar(AS1),'Info',MB_OK);
            end
            else
            begin
            MessageBox(0,APC1,'Hallo und K.O',MB_OK)
            end;
            end
            else
            MessageBox(0,'Fehler','Hallo und K.O',MB_OK);
            ...

            </listing>

            Mfg Steffe

            Comment


            • #7
              Hallo Stefan,

              erst einmal Danke für die Antwort. Die von Dir aufgelistete Webseite hatte ich bereits besucht. Leider funktionieren die Beispiele (in Bezug auf mein geschildertes Problem) nicht. Da ich auch über die Version 7 verfügen, habe ich das ganze da auch probiert und was soll ich schreiben (sagen), da klappt es. Ich vermute mal, das es sich hier um einen Bug handelt. Ich glaube jedoch nicht, das (sofern es tatsächlich ein Bug ist) dieser noch für die 2005 Version behoben wird. Alle Welt redet ja bereits vom Nachfolger, mit noch mehr Funktionalität die die wenigsten brauchen.

              MFG
              André Mosinsk

              Comment


              • #8
                Hallo Andre,

                die Opentoolsapi wurde ziemlich oft überarbeitet, so dass es mich nicht wundert, dass es plötzlich nicht mehr funktioniert. Da ich meine Delphi-Aktivitäten als Hobby ansehe, bleibe ich bei Version 7.

                Die Online-Hilfe bezüglich Opentool-API ist schon ausgebaut worden.

                Mehr Hinweise kann ich Dir leider nicht geben, als vielleicht sich bei den Beispielen nochmal umzusehen.

                Mfg Steffe

                Comment

                Working...
                X