Aktuelle Zeit: 28.02.2020 14:20

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: C# dll in PureBasic nutzen ?
BeitragVerfasst: 12.12.2019 16:14 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
Hallo Leute,

ich möchte jetzt ganz allgemein Fragen ob jemand eine Anleitung hat/kennt, wie man evtl. C#.Net - Dlls mit PureBasic nutzen kann ?

Ganz allgemein und unspezifisch

_________________
Betriebssysteme: MX Linux 19 / Windows 10 / Mac OS 10.15.2 / Android 7.0 ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: C# dll in PureBasic nutzen ?
BeitragVerfasst: 12.12.2019 19:03 
Offline
Benutzeravatar

Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9
über die COM-Schnittstelle geht das ganz gut. Einer der vielen Treffer:

https://programmingistheway.wordpress.com/2016/03/09/make-a-comvisible-dll/

Wenn die DLL von Dir ist, dann sollte das kein Problem darstellen. Wenn nicht, dann müsstest Du u.U. noch eine Wrapper-DLL schreiben.

Grüße ... Peter

_________________
Schrödingers Smiley :):


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: C# dll in PureBasic nutzen ?
BeitragVerfasst: 12.12.2019 21:14 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
Ach ja!
Das Ganze mit dem COM-Interface und der Sache "C++/CLI" ist mir noch zu kompliziert und zu aufwendig.

Ich bleibe erstmal bei der Lösung:

->Ein .Net - Konsolen-Programm erstellen (VB/C#)
->Dieses Programm kann dann über Konsolenparametern die .Net-Funktionen aus der aufgerufen .Net Dll ausführen.
->Dieses Hilfsprogramm wird dann über PureBasic mit unterschiedlichen Parametern (Funktionsaufrufe) gestartet.

Das ist nicht sehr schön und elegant, aber es ist einfacher.

_________________
Betriebssysteme: MX Linux 19 / Windows 10 / Mac OS 10.15.2 / Android 7.0 ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: C# dll in PureBasic nutzen ?
BeitragVerfasst: 12.12.2019 21:29 
Offline
Admin
Benutzeravatar

Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Normalerweise sind PB und .NET nicht miteinander kompatibel, weil .NET managed Code und PB unmanaged Code ist, aber du kannst den Code automatisiert als unmanaged Code nach außen bereitstellen, so dass man in PB auch auf eine mit C# geschriebene DLL-Datei und auf die einzelnen Assemblies zugreifen kann. Einfach nach "c# dllexport" googlen, dann findest du die Lösung.
Ich habe ja schon etliche .NET-Methoden für PB gewrappt.

COM würde ich nicht nutzen, wenn ich das hier lese:
Zitat:
NOTE: the framework of the project must be equal or lower the framework 3.5
:freak:

Und Aufrufe über Konsolenparametern würde ich nicht nutzen. Du hast damit immer irgendwelche Einschränkungen und Nachteile. Z.B. kannst du keine richtigen Objekte (z.b. Array) übergeben.

Deshalb würde ich immer die direkte Lösung und keine Workarounds nutzen.

_________________
BildBildBildBild BildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: C# dll in PureBasic nutzen ?
BeitragVerfasst: 12.12.2019 21:47 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
Zitat:
Und Aufrufe über Konsolenparametern würde ich nicht nutzen. Du hast damit immer irgendwelche Einschränkungen und Nachteile. Z.B. kannst du keine richtigen Objekte (z.b. Array) übergeben.

Deshalb würde ich immer die direkte Lösung und keine Workarounds nutzen.


Ja genau da trifft sich der Hammer mit den Daumen. (Oder so Ähnlich)

_________________
Betriebssysteme: MX Linux 19 / Windows 10 / Mac OS 10.15.2 / Android 7.0 ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: C# dll in PureBasic nutzen ?
BeitragVerfasst: 12.12.2019 23:41 
Offline
Benutzeravatar

Registriert: 29.08.2004 13:29
ccode_new hat geschrieben:
Ich bleibe erstmal bei der Lösung:

->Ein .Net - Konsolen-Programm erstellen (VB/C#)
->Dieses Programm kann dann über Konsolenparametern die .Net-Funktionen aus der aufgerufen .Net Dll ausführen.
->Dieses Hilfsprogramm wird dann über PureBasic mit unterschiedlichen Parametern (Funktionsaufrufe) gestartet.

Das ist nicht sehr schön und elegant, aber es ist einfacher.


Warum dann nicht gleich in .NET programmieren?
Ich mische ungern ... dann einfach für eine Sprache entscheiden!

_________________
Windows 10 / Windows 7
PB Last Final / Last Beta Testing


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: C# dll in PureBasic nutzen ?
BeitragVerfasst: 13.12.2019 11:58 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
helpy hat geschrieben:
Warum dann nicht gleich in .NET programmieren?
Ich mische ungern ... dann einfach für eine Sprache entscheiden!


Weil mir PureBasic mehr gefällt.
Das heißt ich komme besser damit klar.

Ich werde mir das hier mal genauer anschauen:

https://blog.xpnsec.com/rundll32-your-dotnet/

Wie verhält sich sowas bei Parameterübergaben (das kleinere Übel) und wie bei Funktionsrückgaben (das größere Übel) ?

_________________
Betriebssysteme: MX Linux 19 / Windows 10 / Mac OS 10.15.2 / Android 7.0 ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: C# dll in PureBasic nutzen ?
BeitragVerfasst: 13.12.2019 12:13 
Offline
Admin
Benutzeravatar

Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
ccode_new hat geschrieben:
Wie verhält sich sowas bei Parameterübergaben (das kleinere Übel) und wie bei Funktionsrückgaben (das größere Übel) ?

Ganzzahlen sind kein Problem. Bei Strings musst du marshalling machen, ist aber auch kein Problem.
Falls ich es nicht vergesse, kann ich heute Abend einen Beispielcode hier posten.
Aber grundsätzlich ist es kein Problem, Parameter (Ganzzahl, Float, Strings, Arrays) zu übergeben.

Ich würde aber ohne rundll32 nutzen und lieber direkt mit OpenLibrary() aufrufen. Dann muss nicht ein extra Prozess geöffnet werden.

_________________
BildBildBildBild BildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: C# dll in PureBasic nutzen ?
BeitragVerfasst: 13.12.2019 21:51 
Offline
Admin
Benutzeravatar

Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Hier eine Anleitung:
1. Erstelle mit Visual Studio eine Klassenbibliothek.
2. Installiere das Nuget-Paket: https://www.nuget.org/packages/UnmanagedExports/
3, Erstelle eine statische Methode und definiere sie als DLLExport:
Code:
[RGiesecke.DllExport.DllExport]
public static int Test123() {
        //...
        return 1;
}


Übergabeparameter kannst du beliebig definieren. Beispiele:
Integer:
Code:
int Value

String:
Code:
[System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.LPWStr)] string Value

Pointer:
Code:
System.IntPtr Value

Wenn du einen String in einen out-Parameter zurückgeben möchtest:
Code:
System.IntPtr Output

Code:
byte[] OutputBytes = System.Text.Encoding.Unicode.GetBytes(string + "\0");
System.Runtime.InteropServices.Marshal.Copy(OutputBytes, 0, Output, OutputBytes.Length);

Array:
Code:
System.IntPtr Array, int ArraySize

Code:
for (int i = 0; i < ArraySize; i++) {
   var strPtr = (System.IntPtr)System.Runtime.InteropServices.Marshal.PtrToStructure(Array, typeof(System.IntPtr));
   if (strPtr == System.IntPtr.Zero) {
      break;
   } else {
      ArrayField = System.Runtime.InteropServices.Marshal.PtrToStringUni(strPtr);

      Array = new System.IntPtr(Array.ToInt64() + System.IntPtr.Size);
   }
}

Wenn du WinAPI in C# benutzen möchtest:
Code:
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);


Das sollten genug Beispielcodes sein.

_________________
BildBildBildBild BildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: C# dll in PureBasic nutzen ?
BeitragVerfasst: 13.12.2019 23:46 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
Vielen lieben Dank für die Mühe.

_________________
Betriebssysteme: MX Linux 19 / Windows 10 / Mac OS 10.15.2 / Android 7.0 ;)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye