auf Bibliothek(DLL) zugreifen Code C# zu C++



  • Hallo , ich benutze zur Schrittmotorprogrammierung eine DLL : CommandPd4I.dll .
    Ich habe ein kleines C# Projekt : Dort ist die CommandPD4.dll hinzugefügt;

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    
    using CommandsPD4I;  //Die DLL für die Steuerung
    
    namespace CSharpExample
    {
        public partial class CSharpExample : Form
        {
            public CSharpExample()
            {
                InitializeComponent();
            }
    
            private void StartBtn_Click(object sender, EventArgs e)
            {
                ComMotorCommands cmd = new ComMotorCommands(); //Klasse aus COMMANDPD4.dll
    
                cmd.SelectedPort = ComPortBox.Text;
                cmd.Baudrate = Convert.ToInt32(BaudrateBox.Text);
               //Motor  konfigurieren & starten
                cmd.SetAddress(Convert.ToInt32(Motor1ID.Value));
                //1 entspricht dem Positioniermodus
                cmd.SetOperationMode(1);
               //1 entspricht relativer positionierung
                cmd.SetPositionType(1);
               //100 Hz
                cmd.SetMaxFrequency(100);
    
                cmd.StartTravelProfile();
              }
       }
    }
    

    Mein Problem : Ich muss auf die DLL mit Visual c++ zugreifen.
    Kann mir jemand sagen wie man das macht ?
    Wenn ich eine Formanwendung starte habe ich eine Headerdatei Form1.h .
    Kann ich dort sowas schreiben wie
    using namespace COMMANDPD4.dll ???

    Gruß
    Torsten



  • Füge die Assembly einfach dem Projekt hinzu (Projekt|Properties|Common Properties|Add New Reference...

    Das kannst Du die in C++/CLI direkt verwenden!!!!

    Beachte aber: Du machst kein C/C++ sondern C++/CLI!!! dann kannst Du eigentlich gleich bei C# bleiben...

    WARUM willst Du C++/CLI machen?????



  • Jochen Kalmbach schrieb:

    Füge die Assembly einfach dem Projekt hinzu (Projekt|Properties|Common Properties|Add New Reference...

    Das kannst Du die in C++/CLI direkt verwenden!!!!

    Beachte aber: Du machst kein C/C++ sondern C++/CLI!!! dann kannst Du eigentlich gleich bei C# bleiben...

    WARUM willst Du C++/CLI machen?????

    Wenn ich die Reference hinzugefügt habe: kann ich dann wie beim C#
    eine Klasse erzeugen mit:
    ComMotorCommands cmd = new ComMotorCommands(); ???
    --> Fehler:Nichtdeklarierter Bezeichner, er findet die Funktion ComMotorCommands nicht!?

    Muss man nicht noch im Quellcode die Dll importieren ??
    Oder wie beim C# Projekt die DLL dem Projekt als datei hinzufügen?

    (Ich benutze C++ mit Visual Studio weil ich mich damit eingearbeitet habe und ich das Visual C++ -Buch habe .
    Ich weiß auch nicht wozu mann C# eigentlich benutzt?)



  • 🙄

    Oje...



  • theta schrieb:

    🙄

    Oje...

    ! bitte genauer 😕

    Also habe verweise hinzugefügt ,
    dann habe ich in der Haup.cpp

    using namespace CommandsPD4I;

    int main(..)
    {
    ComMotorCommands cmd = gcnew ComMotorCommands();
    }

    ergibt Fehler:1> "CommandsPD4I::ComMotorCommands": Die Klasse hat keinen Kopierkonstruktor.

    😞



  • #include "stdafx.h"
    #include "Form1.h"
    
    using namespace nano;
    using namespace CommandsPD4I;
    //void ComMotorCommands();
    [STAThreadAttribute]
    int main(array<System::String ^> ^args)
    {
    	// Aktivieren visueller Effekte von Windows XP, bevor Steuerelemente erstellt werden
    	Application::EnableVisualStyles();
    	Application::SetCompatibleTextRenderingDefault(false); 
    
    	// Hauptfenster erstellen und ausführen
    
    	//ComMotorCommands^ cmd = gcnew ComMotorCommands();
    	ComMotorCommands^ cmd = gcnew ComMotorCommands();
    
    	Application::Run(gcnew Form1());
    	return 0;
    }
    

    oh so müsste es gehn hab das ^ vergessen ,

    ich dachte ich brauch noch ne headerdatei , aber das geht wohl auch so, kann jetzt mit cmd->.... auf alle funktionen zugreifen.

    danke


Anmelden zum Antworten