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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren