C# dll in PureBasic nutzen ?
C# dll in PureBasic nutzen ?
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
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: div. Windows, Linux, Unix - Systeme
no Keyboard, press any key
no mouse, you need a cat
no Keyboard, press any key
no mouse, you need a cat
Re: C# dll in PureBasic nutzen ?
über die COM-Schnittstelle geht das ganz gut. Einer der vielen Treffer:
https://programmingistheway.wordpress.c ... sible-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
https://programmingistheway.wordpress.c ... sible-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
Hygge
Re: C# dll in PureBasic nutzen ?
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.
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: div. Windows, Linux, Unix - Systeme
no Keyboard, press any key
no mouse, you need a cat
no Keyboard, press any key
no mouse, you need a cat
Re: C# dll in PureBasic nutzen ?
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:
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.
Ich habe ja schon etliche .NET-Methoden für PB gewrappt.
COM würde ich nicht nutzen, wenn ich das hier lese:
NOTE: the framework of the project must be equal or lower the framework 3.5
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.
Re: C# dll in PureBasic nutzen ?
Ja genau da trifft sich der Hammer mit den Daumen. (Oder so Ähnlich)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.
Betriebssysteme: div. Windows, Linux, Unix - Systeme
no Keyboard, press any key
no mouse, you need a cat
no Keyboard, press any key
no mouse, you need a cat
Re: C# dll in PureBasic nutzen ?
Warum dann nicht gleich in .NET programmieren?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.
Ich mische ungern ... dann einfach für eine Sprache entscheiden!
Windows 10
PB Last Final / (Sometimes testing Beta versions)
PB Last Final / (Sometimes testing Beta versions)
Re: C# dll in PureBasic nutzen ?
Weil mir PureBasic mehr gefällt.helpy hat geschrieben:Warum dann nicht gleich in .NET programmieren?
Ich mische ungern ... dann einfach für eine Sprache entscheiden!
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: div. Windows, Linux, Unix - Systeme
no Keyboard, press any key
no mouse, you need a cat
no Keyboard, press any key
no mouse, you need a cat
Re: C# dll in PureBasic nutzen ?
Ganzzahlen sind kein Problem. Bei Strings musst du marshalling machen, ist aber auch kein Problem.ccode_new hat geschrieben:Wie verhält sich sowas bei Parameterübergaben (das kleinere Übel) und wie bei Funktionsrückgaben (das größere Übel) ?
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.
Re: C# dll in PureBasic nutzen ?
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:
Übergabeparameter kannst du beliebig definieren. Beispiele:
Integer:
String:
Pointer:
Wenn du einen String in einen out-Parameter zurückgeben möchtest:
Array:
Wenn du WinAPI in C# benutzen möchtest:
Das sollten genug Beispielcodes sein.
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: Alles auswählen
[RGiesecke.DllExport.DllExport]
public static int Test123() {
//...
return 1;
}
Integer:
Code: Alles auswählen
int Value
Code: Alles auswählen
[System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.LPWStr)] string Value
Code: Alles auswählen
System.IntPtr Value
Code: Alles auswählen
System.IntPtr Output
Code: Alles auswählen
byte[] OutputBytes = System.Text.Encoding.Unicode.GetBytes(string + "\0");
System.Runtime.InteropServices.Marshal.Copy(OutputBytes, 0, Output, OutputBytes.Length);
Code: Alles auswählen
System.IntPtr Array, int ArraySize
Code: Alles auswählen
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);
}
}
Code: Alles auswählen
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
Re: C# dll in PureBasic nutzen ?
Vielen lieben Dank für die Mühe.
Betriebssysteme: div. Windows, Linux, Unix - Systeme
no Keyboard, press any key
no mouse, you need a cat
no Keyboard, press any key
no mouse, you need a cat