MW.net - IPC Interface (nicht nur) für .net
Forumsregeln
Um uns Moderatoren die Arbeit ein bisschen abzunehmen, gibt es in diesem Unterbereich gewisse, zusätzliche Regeln, die eingehalten werden müssen:
......
Fortsetzung in folgendem Thread: Regeln für diesen Forenbereich
Um uns Moderatoren die Arbeit ein bisschen abzunehmen, gibt es in diesem Unterbereich gewisse, zusätzliche Regeln, die eingehalten werden müssen:
......
Fortsetzung in folgendem Thread: Regeln für diesen Forenbereich
MW.net - IPC Interface (nicht nur) für .net
Hallo,
hier nun also Version 2.0 meines IPC-Interfaces von MWConn (nicht nur) für .net Sprachen.
Die neue Version ist komplett neu geschrieben, die Kommunikation läuft direkt über die entsprechenden API-Calls in .net ab. Es sind alle Features des IPC-Interfaces integriert, also auch das Senden und Empfangen von Kommandos ist implementiert.
Die DLL ist "COM-Sichtbar", kann also auch von nicht .net Sprachen angesprochen werden, auch eine Verwendung mit Javascript ist möglich, um z.B. ein MWConn Windows Gadget zu realisieren.
Geschrieben ist díe DLL in C# mit Visual Studio 2010 und für das .net Framework 2.0.
Im Anhang findet ihr den kompletten Sourcecode, ein Beispielprojekt das die Verwendung demonstriert und die entsprechende Dokumentation.
Fragen, Anregungen und Bug-Reports immer zu mir.
hier nun also Version 2.0 meines IPC-Interfaces von MWConn (nicht nur) für .net Sprachen.
Die neue Version ist komplett neu geschrieben, die Kommunikation läuft direkt über die entsprechenden API-Calls in .net ab. Es sind alle Features des IPC-Interfaces integriert, also auch das Senden und Empfangen von Kommandos ist implementiert.
Die DLL ist "COM-Sichtbar", kann also auch von nicht .net Sprachen angesprochen werden, auch eine Verwendung mit Javascript ist möglich, um z.B. ein MWConn Windows Gadget zu realisieren.
Geschrieben ist díe DLL in C# mit Visual Studio 2010 und für das .net Framework 2.0.
Im Anhang findet ihr den kompletten Sourcecode, ein Beispielprojekt das die Verwendung demonstriert und die entsprechende Dokumentation.
Fragen, Anregungen und Bug-Reports immer zu mir.
- Dateianhänge
-
- MWConnIO-Demo.png (56.25 KiB) 18946 mal betrachtet
-
- MWnet_2_0.zip
- Version 2.0. Inkl. Demo Projekt, Sourcen und Dokumentation
- (305.62 KiB) 915-mal heruntergeladen
-
- MWnet_1_0.zip
- Binarys + Quelltext + Beispielprojekt + Klassendokumentation
- (339.21 KiB) 826-mal heruntergeladen
Zuletzt geändert von Nelix am Mi 25. Aug 2010, 15:10, insgesamt 1-mal geändert.
Re: MW.net - IPC Interface für .net
Waaaas - ein Centrafuse Plugin??? Etwa auch zum SMS senden und empfangen *g* ????
Daran bastel ich nämlich auch gerade (siehe SMS-Man) - allerdings hab ich das Ganze bislang noch nicht als Plugin, sondern erst einmal als Stand-alone-Programm.
Meine .net Kenntnisse sind noch nicht so berauschend, als daß ich mich an ein ganzes Plugin wagen würde, aber ich wäre seeeeeeehr heiß daran interessiert, Deines dann zu testen und werde mir auch mit Sicherheit das Interface mal ansehen, genau sowas hab ich nämlich für meine Idee auch schon gesucht...
Gruß,
Croydon
Daran bastel ich nämlich auch gerade (siehe SMS-Man) - allerdings hab ich das Ganze bislang noch nicht als Plugin, sondern erst einmal als Stand-alone-Programm.
Meine .net Kenntnisse sind noch nicht so berauschend, als daß ich mich an ein ganzes Plugin wagen würde, aber ich wäre seeeeeeehr heiß daran interessiert, Deines dann zu testen und werde mir auch mit Sicherheit das Interface mal ansehen, genau sowas hab ich nämlich für meine Idee auch schon gesucht...
Gruß,
Croydon
Re: MW.net - IPC Interface für .net
Also SMS an SMS empang/senden hab ich noch ar nicht gedacht, vor allem weil das Centrafuse das schon über das Phonemodul kann.
Schau mal bei centrafuse.de ins Forum da findest du mehr über mein Plugin.
Wäre aber ne schöne ergänzung.
Evtl. können wir die Projekte ja "zusammenwerfen", bei interesse schreib mir mal ne Email.
So kompliziert ist die Pluginentwicklung im übrigen gar nicht, es gibt ein scönes SDK für CF.
Schau mal bei centrafuse.de ins Forum da findest du mehr über mein Plugin.
Wäre aber ne schöne ergänzung.
Evtl. können wir die Projekte ja "zusammenwerfen", bei interesse schreib mir mal ne Email.
So kompliziert ist die Pluginentwicklung im übrigen gar nicht, es gibt ein scönes SDK für CF.
Re: MW.net - IPC Interface für .net
Ja ich hab schon ein wenig mit dem SDK herumgespielt, das ist eigentlich auch weniger das Problem - mein Problem ist, daß ich noch viel zu sehr VB6 behaftet arbeite und denke und .net doch ein wenig andere "Herangehensweisen" erfodert. Diese Umstellung wird mich noch ein wenig beschäftigen. Danach können wir gerne über eine Zusammenfassung nachdenken
Die SMS-Funktion über Bluetooth/Phone bringt mir leider nichts, wenn ich das über den Stick machen möchte - ich nutze hier das Tchibo-Angebot mit dem SMS-Paket, das kommt mich günstiger als jedes Handy. Außerdem hab ich arge Probleme, den Bluesoleil auf meinem Car-PC ordentlich ans laufen zu bringen (aber das ist hier zu sehr off-topic...).
Gruß,
Croydon
Die SMS-Funktion über Bluetooth/Phone bringt mir leider nichts, wenn ich das über den Stick machen möchte - ich nutze hier das Tchibo-Angebot mit dem SMS-Paket, das kommt mich günstiger als jedes Handy. Außerdem hab ich arge Probleme, den Bluesoleil auf meinem Car-PC ordentlich ans laufen zu bringen (aber das ist hier zu sehr off-topic...).
Gruß,
Croydon
Re: MW.net - IPC Interface für .net
So, jetzt hab ich mir die DLL mal angesehen - mir fehlt allerdings noch der direkte Zugriff auf die Kommando-Funktion - im Interface müsste diese enthalten sein, da sie offensichtlich von den Connect/Reconnect/Disconnect Funktionen aus aufgerufen wird.
Was ich bräuchte wäre dieses:
Aus dem mwconn-Manual
Gruß,
Croydon
Was ich bräuchte wäre dieses:
Aus dem mwconn-Manual
Also die Möglichkeit über IPC direkt AT-Kommandos zu senden - damit würden sich dann die langen SMS über das PDU Protokoll realisieren lassen.char command[100]; // von MWconn auszuführendes Kommando;
// "MWCONN_CONNECT": verbinden;
// "MWCONN_DISCONNECT": trennen;
// "MWCONN_RECONNECT": neu verbinden;
// "MWCONN_END": Programm beenden;
// ":::ATI": AT-Kommando an Gerät senden (hier "ATI");
// bei Novatel-Geräten nur mit Novatel-DLL;
// ":250:4000:ATI": desgleichen, jedoch mit
// Wartezeitangaben, 250ms nach dem Senden
// beginnt der Empfang, welcher maximal 4 weitere
// Sekunden später abgeschlossen sein muss;
// Datenrichtung MWconn->extern
// Hinweis: nicht alle Datenkarten unterstützen alle Informationen;
Gruß,
Croydon
Re: MW.net - IPC Interface für .net
Ich habe mir den Code gerade mal ein wenig angeguckt und ein paar Modifikationen vorgenommen, damit man auch Befehle an MWconn richten kann.
Fangen wir an bei der DLL. Folgenden Code habe ich ergänzt:
Zudem muss die exports-Klausel erweitert werden:
Danach fehlt nur noch das Wrapping in der Mw.net.cs.
Der Import der Methoden:
Die Definition der Property-Handler:
Die Erweiterung des "String-Hacks" (die Answer kann bis zu 600 Zeichen lang sein):
Und schlussendlich die Hilfsmethoden:
Wäre nett, wenn das ganze jemand mal testen könnte. Ich konnte zwar testhalber die DLL kompilieren, um Syntaxfehler auszuschließen, allerdings fehlt mir hier zur Zeit die .NET-Umgebung, um auch den C#-Code überprüfen zu können.
Wenn man übrigens in der DLL alle Windows.CopyMemory() durch SysUtils.Move() ersetzt und die Windows-Unit und die Classes-Unit aus der uses-Klausur rausschmeißt, halbiert sich die Größe der DLL...
cheers...
Fangen wir an bei der DLL. Folgenden Code habe ich ergänzt:
Code: Alles auswählen
function MWconn_GetCommand(var AStringPointer: PChar; AStringLength : Integer) : Integer; stdcall; export;
begin
Result := - 1;
// check if IPC is open
if (vBufferB <> nil) then
begin
// check if we have read access
if (vAccessMode <> mwamNone) then
begin
try
if (AStringLength > Length(vBufferB^.Command)) then
AStringLength := Length(vBufferB^.Command);
// copy data from answer buffer
Move(vBufferB^.Command, AStringPointer, AStringLength);
Result := AStringLength;
except
end;
end;
end;
end;
function MWconn_SetCommand(var AStringPointer: PChar; AStringLength : Integer) : Boolean; stdcall; export;
begin
Result := false;
// check if IPC is open
if (vBufferB <> nil) then
begin
// check if we have write access
if ((vAccessMode = mwamWrite) or (vAccessMode = mwamAll)) then
begin
try
// prevent buffer overflow
if (AStringLength < Length(vBufferB^.Command)) then
begin
// copy data to command buffer
Move(AStringPointer, vBufferB^.Command, AStringLength);
vBufferB^.Command[AStringLength] := #0;
Result := true;
end;
except
end;
end;
end;
end;
function MWconn_Answer(var AStringPointer: PChar; AStringLength : Integer) : Integer; stdcall; export;
begin
Result := - 1;
// check if IPC is open
if (vBufferB <> nil) then
begin
// check if we have read access
if (vAccessMode <> mwamNone) then
begin
try
if (AStringLength > Length(vBufferB^.Answer)) then
AStringLength := Length(vBufferB^.Answer);
// copy data from answer buffer
Move(vBufferB^.Answer, AStringPointer, AStringLength);
Result := AStringLength;
except
end;
end;
end;
end;
Code: Alles auswählen
exports
[...]
MWconn_GetCommand,
MWconn_SetCommand,
MWconn_Answer;
Der Import der Methoden:
Code: Alles auswählen
[DllImport("MWconnIO.dll")]
private static extern int MWconn_GetCommand(ref string Command, int iStrLen);
[DllImport("MWconnIO.dll")]
private static extern bool MWconn_SetCommand(ref string Command, int iStrLen);
[DllImport("MWconnIO.dll")]
private static extern int MWconn_Answer(ref string Answer, int iStrLen);
Code: Alles auswählen
/// <summary>
/// Einen Befehl ausführen lassen
/// </summary>
public string Command
{
get
{
return GetCommandVar();
}
set
{
SetCommandVar(value);
}
}
/// <summary>
/// Die Antwort zu einem ausgeführten Befehl
/// </summary>
public string Answer
{
get
{
return AnswerVar();
}
}
Code: Alles auswählen
// Hacks um Strings aus der Pascal-DLL herauszubekommen
int maxLen = 768;// 256;
Code: Alles auswählen
private string GetCommandVar()
{
string GetCommandVar_Temp = new string(' ', maxLen);
MWconn_GetCommand(ref GetCommandVar_Temp, maxLen);
return GetCommandVar_Temp;
}
private bool SetCommandVar(string ACommand)
{
return MWconn_SetCommand(ref ACommand, ACommand.Length);
}
private string AnswerVar()
{
string AnswerVar_Temp = new string(' ', maxLen);
MWconn_Answer(ref AnswerVar_Temp, maxLen);
return AnswerVar_Temp;
}
Wenn man übrigens in der DLL alle Windows.CopyMemory() durch SysUtils.Move() ersetzt und die Windows-Unit und die Classes-Unit aus der uses-Klausur rausschmeißt, halbiert sich die Größe der DLL...
cheers...
Weblog: https://yahe.sh
Re: MW.net - IPC Interface für .net
Hallo,
super, genau an ser Stelle bin ich selber nicht weitergekommen.
Habe gerade deinen Code in die DLL(s) "eingearbeitet" und versucht mal ein Kommando zu senden, leider bis jetzt erfolglos.
Das senden des Commandos klappt scheinbar, zumindest ohne Fehlermldung, wenn ich aber versuche die Antwort per .answer zu lesen oder das Commando wieder auslesen will beendet(!) sich mein Programm kommentarlos, sogar der Visual Studio Debugger meldet dann einfach "Prozess beendet", der Fehler lässt sich auch nicht per try ... catch abfangen.
super, genau an ser Stelle bin ich selber nicht weitergekommen.
Habe gerade deinen Code in die DLL(s) "eingearbeitet" und versucht mal ein Kommando zu senden, leider bis jetzt erfolglos.
Das senden des Commandos klappt scheinbar, zumindest ohne Fehlermldung, wenn ich aber versuche die Antwort per .answer zu lesen oder das Commando wieder auslesen will beendet(!) sich mein Programm kommentarlos, sogar der Visual Studio Debugger meldet dann einfach "Prozess beendet", der Fehler lässt sich auch nicht per try ... catch abfangen.
Re: MW.net - IPC Interface für .net
Hm, das ist sehr merkwürdig... ich habe bei der Stringübergabe (etc.) darauf geachtet, genauso vorzugehen wie du...
cheers...
cheers...
Weblog: https://yahe.sh
Re: MW.net - IPC Interface für .net
Hallo,
da das Visual Studio keine weitere Fehlermeldung ausgibt und ihm der Prozess quasi "unterm Hintern" beendet wird, gehe ich davon aus das der Fehler im Ummanged Memory, sprich in der MWconnIO.dll (also im Pascal Teil) liegt, denn dort hat der VS Debugger keinen Zugriff.
BTW:
Wie debugged man Delphi 7 Dll's?
In VS Studio kann man DLL's an einen (laufenden) Prozess anhängen und die DLL in der Zielanwendung debuggen, geht sowas ähnliches auch in Delphi? So müsste man dem Fehler doch auf die Spur kommen.
Meine Pascal bzw. Delphi Kenntnisse sind sehr rudimentär.
da das Visual Studio keine weitere Fehlermeldung ausgibt und ihm der Prozess quasi "unterm Hintern" beendet wird, gehe ich davon aus das der Fehler im Ummanged Memory, sprich in der MWconnIO.dll (also im Pascal Teil) liegt, denn dort hat der VS Debugger keinen Zugriff.
BTW:
Wie debugged man Delphi 7 Dll's?
In VS Studio kann man DLL's an einen (laufenden) Prozess anhängen und die DLL in der Zielanwendung debuggen, geht sowas ähnliches auch in Delphi? So müsste man dem Fehler doch auf die Spur kommen.
Meine Pascal bzw. Delphi Kenntnisse sind sehr rudimentär.
Re: MW.net - IPC Interface für .net
Bei Delphi funktioniert auf genau die gleiche Weise...
Ich mache es meistens über Start->Parameter... - dort kannst du eine Hostanwendung definieren, die für's Debuggen herhalten soll...
cheers...
Ich mache es meistens über Start->Parameter... - dort kannst du eine Hostanwendung definieren, die für's Debuggen herhalten soll...
cheers...
Weblog: https://yahe.sh