C++ .dll Code zu .NET dll Code konvertieren?

Peacemaker

Lt. Commander
Mitglied seit
12.08.2002
Beiträge
137
Renomée
0
hi Leute

Ich möchte ein kleines Plugin (.DLL) für meinen Lieblings Texteditor "Proton 3" machen... (Habe noch nie ein DLL gemacht) Unter Dev-C++ hab ich es zum laufen gebracht. Nur blicke ich, trotz Tutorials, durch die WINAPI nicht wirklich durch ^^... somit kann ich ein Plugin Fenter nicht konfortabel nutzen ;)

Am liebsten würde ich dieses DLL in .NET umsetzen (bevorzugt VB.net). Habe es mit Hilfe der MSDN versucht zu erstellen aber kein Erfolg... (beim versuch das Plugin einzubinden kommt ein Fehler "kein Startpunkt" oder so ähnlich...

Dann habe ich es auch noch in C# (.Net ist im Grunde eh alles das selbe nur andere Syntax :D) versucht, aber auch kein Erfolg...

Hier der C++ Code der funtionierte... Kann mir jemand helfen daraus einen .NET Code zu machen?

Danke im Voraus

Code:
// Die Export-Anweisungen
extern "C" __declspec(dllexport) char * pluginStart( char * text, int selstart, int sellength ); 
extern "C" __declspec(dllexport) int pluginRueckgabetyp(); 
extern "C" __declspec(dllexport) int pluginInterfaceVersion(); 
  
// pluginStart() wird als erstes aufgerufen
char * pluginStart( char * text, int selstart, int sellength ) 
    { 

    // Der Speicherbereich, der zurückgegeben wird. 
    // ...
    
    try { 
        // Fenster
        
        // Text wird an Texteditor zurückgegeben
        return "test";
        } 
        catch ( ... ) { 
        // Exceptions auffangen
        return 0;
        } 
} 
  
// Option: RUECKGABE_ERSETZT_EDITORTEXT = 2 / RUECKGABE_ERSETZT_MARKIERUNG = 1
int pluginRueckgabetyp() 
    {
    return 1;
    }
  
// Interfaceversion des Plugins 
int pluginInterfaceVersion() 
  { 
  return 1;
  }
 
Das wird nicht gehen, da .net-DLLs gänzlich anders aufgebaut sind als normale Win32-DLLs. Wenn Proton keine .net-Plugins unterstützt, geht es eben nicht.

Poste am besten mal Deine Probleme mit dem Win-API. Ich kann Dir wahrscheinlich helfen.
 
ok danke

ich habe mal dieses Tutorial angelesen:
http://www.winprog.org/tutorial/

Kann ich eigentlich ganz normalen C++ Sourcecode auch unter .NET, ohne .NET builden? Bei der .net 2002 ging das, aber bei der 2003er find ich die Option nicht...

WINAPI: mein Problem fängt schon ganz am Anfang bei der Winapi an... Ich habe c/c++ bisher immer nur für Konsolenanwendungen benutzt und habe somit keine Ahnung von der WINAPI ;)

Ich habe zwar jede menge WINAPI Beispielcode (aus dem Tutorial) der als .c/.cpp auch funktioniert aber wie kann diesen zB.: in die pluginStart() Funktion der dll einbauen? Also ich habe Beispielcode von einem einfachen Fenster -> wie kann ich nun dieses Fenster in der dieser Funktion öffnen?

Viel habe ich eh nicht vor... Soll eine einfaches Fenster sein mit einer Listbox (oder vergleichbares), einem Textfeld, und ein paar Buttons... Das ganze soll eine mini Code-Templates Verwaltung werden mit der ich speichern, editieren und Template in den Text Editor einfügen kann...

Danke im Voraus
 
Original geschrieben von Peacemaker
Kann ich eigentlich ganz normalen C++ Sourcecode auch unter .NET, ohne .NET builden? Bei der .net 2002 ging das, aber bei der 2003er find ich die Option nicht...
Erstmal zur Klärung der Begriffe: Mit .net meinst Du sicher Visual Studio. Das hat zwar das .net im Namen, ist aber bei weitem nicht darauf beschränkt. Eigentlich bezeichnet ".net" nur die Plattform, welche hauptsächlich aus dem .net-Framework besteht.
Ein Win32-Projekt erstellst Du mit Visual Studio 2003, indem Du auf Datei->Neu->Projekt gehst und dann als Typ Visual C++ auswählst und rechts entweder "ATL-Projekt", "MFC-DLL" oder "Win32-Projekt". ATL und MFC sind Klassenbibliotheken, die Du nutzen kannst. ATL ist klein, schnell und braucht oft keine Runtime-Bibliothek. MFC ist mächtiger als ATL, aber auch etwas schwerfälliger und braucht vor allem eine dicke Runtime. Bei einem reinen Win32-Projekt musst Du alles selbst machen. Hmmmm, schwierige Entscheidung, da Du ja eine DLL mit GUI bauen willst. Ohne GUI würde ich Dir ATL empfehlen. Mit GUI tendiere ich eher zu MFC, aber da hast Du die dicke Runtime, welche mit ausgeliefert werden muss. Reines Win32 ist theoretisch am besten, macht aber die meiste Arbeit. Ich gehe im folgenden mal von reinem Win32 aus.
Original geschrieben von Peacemaker
Ich habe zwar jede menge WINAPI Beispielcode (aus dem Tutorial) der als .c/.cpp auch funktioniert aber wie kann diesen zB.: in die pluginStart() Funktion der dll einbauen? Also ich habe Beispielcode von einem einfachen Fenster -> wie kann ich nun dieses Fenster in der dieser Funktion öffnen?
Kommt drauf an. Ich nehme an, Du meinst das Beispiel aus Punkt 2 des Tutorials. Da musst Du den Code aus der WinMain verwenden. Ich würde mir einen Methode BuildWindow() bauen, welche den Code aus der WinMain (ggf. modifiziert) bekommt und diese dann aufrufen.
Original geschrieben von Peacemaker
Viel habe ich eh nicht vor... Soll eine einfaches Fenster sein mit einer Listbox (oder vergleichbares), einem Textfeld, und ein paar Buttons... Das ganze soll eine mini Code-Templates Verwaltung werden mit der ich speichern, editieren und Template in den Text Editor einfügen kann...
Also soll es ein Dialog werden. Hmmm, da gibt's prinzipiell schonmal 2 Möglichkeiten:
1) Den Dialog komplett per Code bauen. Dazu musst Du für das Fenster keine neue Klasse registrieren, sondern nimmst stattdessen die Klasse #32770. Das wird aber alles recht mühselig.
2) Du stattest die DLL mit einer Dialog-Ressource aus. Den Dialog kannst Du dann wie in Visual Basic, Delphi usw. "zeichnen". Den fertig designten Dialog kann man dann per CreateDialog()-API laden und anschließend mit dem ShowWindow()-API anzeigen. Der ganze Spaß, der in der WinMain des Tutorials steht (bis zu dem ShowWindow()), entfällt dabei.
Ich würde die 2. Variante nutzen.

Ich habe noch nie eine DLL geschrieben, die einen Dialog anzeigt, also ist es gut möglich, dass nicht alles stimmt was ich hier schreibe.
 
ok danke für die Info :)

habe gerade eine alte Trail Version von Borland Builder auf meiner HDD gefunden :). Da kann ich meine Forms per Drag & Drop zusammenbauen :) ich werde es mal austesten...

EDIT: habe c++.net dazuinstalliert und habs nun gefunden... mal schaun wie weit ich es schaffe :)

EDIT2: wie kann ich eine "DLL mit einer Dialog-Ressource ausstatten" ? :) naja ich werds schon irgendwie rausfinden...
 
Zuletzt bearbeitet:
Original geschrieben von Peacemaker
EDIT2: wie kann ich eine "DLL mit einer Dialog-Ressource ausstatten" ? :) naja ich werds schon irgendwie rausfinden...
In VS 2003: Datei->Neues Element hinzufügen, dann Ressourcenskript. Und dann in der Ressourcenansicht per Rechtsklick einen Dialog hinzufügen.
 
super danke nun hab ichs auch gefunden :)

ich wollte das immer in der Projektansicht hinzufügen und da wollte VS das nicht machen...

So bisher habe ich mal die "Programm"-Funktionen über ein "Win32 C++ Forms Projekt" fast alle ausprogrammiert (dauerhaft speichern und die Fehlerbehandlung fehlt noch ;))...

Mal schaun wie ich das morgen in so einen Dialog bringe :)
 
hi

Nachdem ich heute Vormittag & Nachmittag mit dll & Dialogs herumgetestet habe und bei mir beides zusammen (dll & dialog) nie funktioniert hat, habe ich mir mal etwas grundlegendes überlegt...

Um das Plugin mit den geplanten funktionen zu starten muss man insgesamt 4 klicks machen... mit einem Hintergrundprogramm ist das genausoviel wenn nicht weniger...

also habe ich die DLL aufgegeben und mir heute so ein kleines .net Programmchen mit allen raffinessen wie XML-Dateiformat & XSD-Schema ect... gemacht :D. warum nicht gleich so... ;)
 
Zurück
Oben Unten