Laden...

Wie kann ich aus meinem Programm auf eine externe DLL/API zugreifen?

Erstellt von -eichi- vor 3 Jahren Letzter Beitrag vor 3 Jahren 559 Views
Thema geschlossen
-
-eichi- Themenstarter:in
1 Beiträge seit 2020
vor 3 Jahren
Wie kann ich aus meinem Programm auf eine externe DLL/API zugreifen?

Hallo zusammen.

Vorab hab sehr wenig Ahnung vom Programmieren.
Hab mir mal vor Jahren Java etwas beigebracht, das meiste aber wieder vergessen 🙁

So nun zu meinen Problem:

Bin CAD-Konstrukteure und arbeite Mit MegaCAD. Manche Sich wiederholende Arbeitsabläufe nerven mich ziemlich. Daher hab ich nun beschlossen das ich mir die API des Programms mal anschaue und versuche mir ein Paar kleine Helfer zu bauen.

Entsprechende Tutorials hab ich mir schon angeschaut.
Der grundablauf ist folgender:

Ich erstelle Mit VisualStudio eine Net-Framework Klassenbibliotek in der ich erstmal auf die DLL Verweise (Megadotnet.dll)
Dann schreib ich eine Standartmaske die wie folgt aussieht:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MegaDotNet;

 

namespace MegaExample

{

public class MegaInvoke

{

CMegaInterface m_iMega;

 

public MegaInvoke(object env)

{

m_iMega = new CMegaInterface(env);

}

 

//=======================================================================================

 

public short MegaMain(

string strName,

string strArgs)

{

return 0;

}

 

//=======================================================================================

}

}

Soweit ich das verstanden hab kann ich MegaMain mein zeug Reinpacken
das funktioniert auch soweit.
Leider benötige ich einige Funktionen aus Der API für die ich keine Beispiele hab.

Dokumentiert sind sie wie folgt:


public string ReadBodyName(

CMegaObj3D obj);

Die Funktion soll den Namen eines 3D-Objekts ermitteln.
Leider kapier ich nicht wie ich das verwenden soll bzw wo ich das hinschreiben soll.
hab jetzt schon einiges ausprobiert , leider erfolglos.
Am logischten finde ich es so :


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MegaDotNet;


namespace MegaCAD_test1
{
    public class MegaInvoke
    {


        CMegaInterface m_iMega;



        public MegaInvoke(object env)

        {

            m_iMega = new CMegaInterface(env);

        }




        //=======================================================================================
        public string ReadBodyName(CMegaObj3D obj
            );
        //=======================================================================================
       
       

       //=======================================================================================
    public short MegaMain(

        string strName,

        string strArgs)

        {

                MessageBox.Show(obj);



            return 0;

        }




        //=======================================================================================

    }
}

Jedoch bringt er mir immer den Fehler das "ReadBodyName" nicht als extern oder abstrakt gekennzeichnet ist , wenn ich "extern" davor schreibe bringt er mir die Fehler:

  • extern muss dem membertyp/namen vorangehen
  • Methode muss einen Rückgabetyp besitzen
  • der Name Obj ist im aktuellen kontext nicht vorhanden

Weis echt nicht was der von mir will
Die Duku zur API gibt leider fast nix her.

Kann mir hier wer helfen ?

mfg -eichi-

16.806 Beiträge seit 2008
vor 3 Jahren

Letzten Endes musst Du Dir erstmal die Grundlagen beibringen; da wirst Du nicht dran vorbei kommen.
[FAQ] Wie finde ich den Einstieg in C#?

public string ReadBodyName(CMegaObj3D obj);

ist vermutlich in der Dokumentation nur die Signatur; eine Methode musst Du selbst draus machen.

public string ReadBodyName(MegaObj3D obj)
{
 // Dein Code.
}

Aber die Dokumentation wird so geschrieben sein, dass Du eben die Grundlagen von C# beherrschst; die kann Dir das Forum nicht beibringen - das kannst nur Du.

Entsprechende Syntax-Fehlermeldungen kannst Du eigentlich fast alle selbst lösen; aber ja, zur Anwendung der Lösung brauchst Du dann auch wieder die Grundlagen 😃
[Hinweis] Syntaxfehler selbst lösen (Compilerfehlermeldungen)

A
764 Beiträge seit 2007
vor 3 Jahren

Hallo -eichi-

Erstmal vorne weg, wir helfen hier gerne, aber bitte lese dir [Hinweis] Wie poste ich richtig? durch.
Insbesondere Punkt 2.2 Keine Crossposts (https://ww3.cad.de/foren/ubb/Forum22/HTML/005523.shtml).

Jedoch bringt er mir immer den Fehler das "ReadBodyName" nicht als extern oder abstrakt gekennzeichnet ist , wenn ich "extern" davor schreibe bringt er mir die Fehler:

  • extern muss dem membertyp/namen vorangehen
  • Methode muss einen Rückgabetyp besitzen
  • der Name Obj ist im aktuellen kontext nicht vorhanden

Das Keyword extern ist dafür da um externe Methoden zu deklarieren. Wenn man zum Beispiel eine C++-dll einbindet. Megadotnet.dll ist eine .NET-dll und der C#-Compiler kann die Deklaration aus der dll entnommen werden. Die Lösung hat Abt schon beschrieben.

Ich habe auf die schnelle keine Beschreibung der API gefunden. Kannst du bitte einen entsprechenden Link schicken?

Gruß
Alf

Hinweis von Abt vor 3 Jahren

Ist daher auch geschlossen wegen Cross Post.
Danke für den Hinweis.

Thema geschlossen