EXE greift nicht auf DLL zu: "error C3767 - Auf mögliche Funktion(en) kann nicht zugegriffen werden."



  • Hallo!

    Ich versuche jetzt eine DLL (CLR, nicht "Win32") zu erstellen.
    Diese hat erstmal zu Testzwecken nur eine Addier-Funktion drin,
    und lässt sich einwandfrei kompilieren.

    Dann habe ich im gleichen Projektordner noch eine GUI als Projekt hinzugefügt, welche die DLL verwenden soll.
    Unter "Projekt | Eigenschaften | Allgemeine Eigenschaften | Verweise | Neuen Verweis hinzufügen" habe ich auch den Verweis (unter "Projekt") zu der DLL hinzugefügt.
    Die GUI ist eine Windows-Form und hat lediglich einen Button (btnTest) und eine Textbox (tbTest), da ich nach einem Klick auf den Button gerne das Rechenergebnis (via DLL berechnet) in der Textbox ausgeben möchte.

    Ich bekomme immer eine Fehlermeldung, mit der ich nicht so ganz klar komme.
    Google und die Forensuche haben mir da nicht geholfen, aber ich hoffe ihr könnt mir helfen das zu lösen?!

    Fehlermeldung beim Erstellen:
    Form1.h(104) : error C3767: "MeineDLL::Class1::Addieren": Auf mögliche Funktion(en) kann nicht zugegriffen werden.

    Der header der DLL sieht folgendermaßen aus (Deklaration in Zeile 13):

    // MeineDLL.h
    
    #pragma once
    
    using namespace System;
    
    namespace MeineDLL 
    {
    
    	public ref class Class1
    	{
    		// TODO: Die Methoden für diese Klasse hier hinzufügen.
    		static double Addieren(double a, double b);									
    	};
    }
    

    Die cpp-Datei der DLL (Berechnung von Zeile 9-12):

    // MeineDLL.cpp
    
    #include "stdafx.h"
    
    #include "MeineDLL.h"
    
    namespace MeineDLL																		
    {
    	double Class1::Addieren(double a, double b)
    	{
    		return a + b;
    	}
    }
    

    Die GUI (Form1.h) sieht folgendermaßen aus (von mir nur Z. 101-107, der Rest automatisch):

    //Form1.h
    #pragma once
    
    namespace MeineGUI {
    
    	using namespace System;
    	using namespace System::ComponentModel;
    	using namespace System::Collections;
    	using namespace System::Windows::Forms;
    	using namespace System::Data;
    	using namespace System::Drawing;
    
    	/// <summary>
    	/// Zusammenfassung für Form1
    	///
    	/// Warnung: Wenn Sie den Namen dieser Klasse ändern, müssen Sie auch
    	///          die Ressourcendateiname-Eigenschaft für das Tool zur Kompilierung verwalteter Ressourcen ändern,
    	///          das allen RESX-Dateien zugewiesen ist, von denen diese Klasse abhängt.
    	///          Anderenfalls können die Designer nicht korrekt mit den lokalisierten Ressourcen
    	///          arbeiten, die diesem Formular zugewiesen sind.
    	/// </summary>
    	public ref class Form1 : public System::Windows::Forms::Form
    	{
    	public:
    		Form1(void)
    		{
    			InitializeComponent();
    			//
    			//TODO: Konstruktorcode hier hinzufügen.
    			//
    		}
    
    	protected:
    		/// <summary>
    		/// Verwendete Ressourcen bereinigen.
    		/// </summary>
    		~Form1()
    		{
    			if (components)
    			{
    				delete components;
    			}
    		}
    	private: System::Windows::Forms::Button^  btnTest;
    	protected: 
    	private: System::Windows::Forms::TextBox^  tbTest;
    
    	private:
    		/// <summary>
    		/// Erforderliche Designervariable.
    		/// </summary>
    		System::ComponentModel::Container ^components;
    
    #pragma region Windows Form Designer generated code
    		/// <summary>
    		/// Erforderliche Methode für die Designerunterstützung.
    		/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
    		/// </summary>
    		void InitializeComponent(void)
    		{
    			this->btnTest = (gcnew System::Windows::Forms::Button());
    			this->tbTest = (gcnew System::Windows::Forms::TextBox());
    			this->SuspendLayout();
    			// 
    			// btnTest
    			// 
    			this->btnTest->Location = System::Drawing::Point(109, 125);
    			this->btnTest->Name = L"btnTest";
    			this->btnTest->Size = System::Drawing::Size(75, 23);
    			this->btnTest->TabIndex = 0;
    			this->btnTest->Text = L"klicken!";
    			this->btnTest->UseVisualStyleBackColor = true;
    			this->btnTest->Click += gcnew System::EventHandler(this, &Form1::btnTest_Click);
    			// 
    			// tbTest
    			// 
    			this->tbTest->Location = System::Drawing::Point(53, 161);
    			this->tbTest->Name = L"tbTest";
    			this->tbTest->Size = System::Drawing::Size(186, 20);
    			this->tbTest->TabIndex = 1;
    			// 
    			// Form1
    			// 
    			this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
    			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
    			this->ClientSize = System::Drawing::Size(292, 273);
    			this->Controls->Add(this->tbTest);
    			this->Controls->Add(this->btnTest);
    			this->Name = L"Form1";
    			this->Text = L"Form1";
    			this->ResumeLayout(false);
    			this->PerformLayout();
    
    		}
    #pragma endregion
    
    	private: System::Void btnTest_Click(System::Object^  sender, System::EventArgs^  e) 
    			 {
    				 // hier den Programmcode rein, wenn der Button gedrückt wird!
    				 double a = 7.4;
    				 double b = 99;
    				 double Ergebnis;
    				 Ergebnis = MeineDLL::Class1::Addieren(a, b);
    				 Form1::tbTest->Text = Ergebnis;
    			 }
    	};
    }
    

    Ich hoffe ihr habt eine Lösung dafür.

    Gruß



  • Naja, Du könntest ja einfach mal F1 drücken, oder?

    namespace MeineDLL 
    { 
        public ref class Class1 
        { 
            public: static double Addieren(double a, double b);                                    
        }; 
    }
    


  • Ich habe das "public" schon nach der Suche in der MSDN davorgeschrieben, allerdings ohne den Doppelpunkt davor.
    Der steht allerdings auch in der MSDN dabei, hab ich wohl übersehen...

    Danke.

    Gruß


Anmelden zum Antworten