Autor Beitrag
marius99
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Do 03.03.11 13:45 
Hallo,

ich habe viel zum Thema gefunden, leider keine Antworten.

Ich möchte in C# eine Library erstellen und diese ohne COM-Objekt zur Laufzeit einbinden. Geht das überhaupt?

Beispiel der Dll:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ClassLibrary1
{
   public class Class1
   {
      public string Test( string param ) 
      {
         Form1 TestForm = new Form1();
         TestForm.ShowDialog();
         return param;
      }        
   }
}


Wie binde ich die nun in Delphi ein?

Hatte es so mal versucht:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
...
Type TFNOneFunction = function(param: String): stringstdcall;
...
Var
  myfunction : TFNOneFunction;
  myDLLhandle : Thandle;
begin
  myDLLhandle:=LoadLibrary('ClassLibrary1.dll');
  myfunction := nil;
  If myDLLhandle <> 0  then
  begin
    @myfunction := GetProcAddress(myDLLhandle,'ClassLibrary1.Class1.Test'); // hier auch schon nur mit Test versucht
    If @myfunction <> nil then
      myfunction('test')
    else
      showmessage('error');

    FreeLibrary(myDLLhandle);
  end
  else
    showmessage('error');
  end;


Geht leider nicht. Wie macht man es denn richtig?

Gruß Marius
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 03.03.11 15:06 

_________________
>λ=

Für diesen Beitrag haben gedankt: marius99
marius99 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Do 03.03.11 16:06 
Vielen Dank für die Hilfe. Habe jetzt meine DLL umgebaut. Allerdings funktioniert der Aufruf in Delphi noch immer nicht...

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using RGiesecke.DllExport;
using System.Runtime.InteropServices;

namespace ClassLibrary1
{
   public class Class1
   {
      [DllExport( "Test", CallingConvention = CallingConvention.StdCall )]
      public static string Test( string param ) 
      {
         Form1 TestForm = new Form1();
         TestForm.ShowDialog();
         return param;
      }
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 03.03.11 16:30 
Den MSBuild-Task hast du aber schon hinzugefügt?

_________________
>λ=
marius99 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Do 03.03.11 16:37 
user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
Den MSBuild-Task hast du aber schon hinzugefügt?


Nein, habe mir jetzt mal die Vorlage von Robert Giesecke geholt. Damit bin ich schon einen Schritt weiter. Habe jetzt zwar eine Zugriffsverletzung, aber das ist ja immerhin schon mal was. :D