Dll in C# einbinden

Gast #616297
Lesenswert?
• ▲
▼
Hallo,

habe in einem Visual Studio 2005 Win32 Template eine Funktion erstellt 
und das Modul als *.Dll compiliert.

In einer C# GUI Anwendung möchte ich nun auf die Funktion in der *.Dll 
zugreifen.

Nun weiß ich nicht, wie ich die *.Dll in C# einbinden soll.

Vielleicht kann mir da jemand weiterhelfen.


Danke und Gruß
Gast #616401
Lesenswert?
• ▲
▼
Hallo,

also irgendwie tu ich mir da wohl etwas schwer.
Komme von c und da läufts hier noch unrund.

Im Konstruktor ist der DllImport denke ich soweit richtig.

Nun sollte eigentlich, wenn der button1_Click betätigt wird, die 
Funktion in der Dll aufgerufen werden.

Bekomme folgende Fehlermeldungen:

The name 'DllImport' does not exist in the current context

The name 'Lowlevel01' does not exist in the current context


Lowlevel01.dll liegt im gleichen Ordner wie Program.cs.

Das einbinden der dll unter Add References geht nicht.

Was mache ich falsch?
Angehängte Dateien:
#616432
Lesenswert?
• ▲
▼
DllImport ist ein Attribut, das direkt vor jeder extern deklarierten 
Funktion stehen muss.

[DllImport("Kernel32.dll")]
public static extern UInt32 GetTickCount();

u.U. noch das passende using System.Runtime.InteropServices hinzufügen
und das ganze dann in eine eigene Klasse verpacken z.B.
1
class Kernel32 {
2
    [DllImport("Kernel32.dll")]
3
    public static extern UInt32 GetTickCount();
4
}
Gast #617058
Lesenswert?
• ▲
▼
Es geht immer noch nicht :o(


Meine Funktion in C sieht wie folgt aus.

extern int Funktion(int, int)
{

}

Das Ding ist als *.dll Compiliert.



In meiner Applikationsebene in C# ist die *.dll nun scheinbar richtig 
eingebunden. Jedenfalls bekomme ich beim builden keine Fehlermeldung.

Beim debuggen bleibt mir das Ding am Funktionsaufruf mit folgender 
Fehlermeldung stehen:

"Unable to find an entry point named 'Funktion' in DLL 
'Lowlevel01.dll'."

Nu, da muß ja wohl was mit der C Funktion nicht passen.

Danke für jeden Tip und Gruß
#617147
Lesenswert?
• ▲
▼
Es fehlt wahrscheinlich
__declspec(dllexport) void __cdecl Funktion(int, int);

und/oder das übliche extern "C" um die Deklaration herum
1
#ifdef __cplusplus
2
extern "C" {
3
#endif
4
__declspec(dllexport) void __cdecl Funktion(int, int);
5
#ifdef __cplusplus
6
}
7
#endif
Gast #617174
Lesenswert?
• ▲
▼
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Runtime.InteropServices;


namespace WindowsApplication1
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());

        }
    }


    public class C_Test
    {

        [DllImport("Lowlevel01.dll")]
        public static extern int Flaeche(int s32_wert1, int s32_wert2);



    }

}






------------------------------------------------------------------------ 
-




        private void button1_Click(object sender, EventArgs e)
        {

            s32_erg = C_Test.Flaeche(2, 4);



            textBox1.Text = Convert.ToString(s32_erg);

        }


------------------------------------------------------------------------ 
-


Der header sieht so 
aus--------------------------------------------------




int Flaeche( int  s32_wert1, int s32_wert2);



und das *.c file kommt nun---------------------------------------------



#include "Berechnung.h"




int Flaeche(int s32_wert1, int s32_wert2)
{
  int s32_flaeche;

  s32_flaeche = s32_wert1 * s32_wert2;




  return(s32_flaeche);

}






Also, würde mich freuen, wenn ihr mir da weiterhelfen könntet.

Danke und Gruß

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.