myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grundlagen von C# » Wie kann ich aus meinem Programm auf eine externe DLL/API zugreifen?
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

geschlossen (weitere Infos)
Zum Ende der Seite springen  

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

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
-eichi-
myCSharp.de-Mitglied

Dabei seit: 01.10.2020
Beiträge: 1


-eichi- ist offline

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

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo zusammen.

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

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:

C#-Code:
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:

C#-Code:
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 :

C#-Code:
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-
01.10.2020 10:59 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 14.280
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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

C#-Code:
public string ReadBodyName(CMegaObj3D obj);

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

C#-Code:
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)
01.10.2020 11:06 Beiträge des Benutzers | zu Buddylist hinzufügen
Alf Ator
myCSharp.de-Mitglied

avatar-586.gif


Dabei seit: 30.10.2007
Beiträge: 604
Entwicklungsumgebung: VS2005 / VS2008


Alf Ator ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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).

Zitat von -eichi-:
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
01.10.2020 14:15 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
myCSharp.de
Moderationshinweis von Abt (01.10.2020 14:18):

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

 
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum
geschlossen (weitere Infos)


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 24.10.2020 16:48