Kann man diese DLL noch einbinden ?

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 27 Antworten in diesem Thema. Der letzte Beitrag () ist von jvbsl.

    Visual Basic-Quellcode

    1. Function WndProc(ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    2. 'Depending on the message that is being sent, we decide how to deal with it...
    3. Select Case msg
    4. 'Is it the message sent from the server form?
    5. Case 3074 'call from homeputer studio
    6. If wParam <> 0 Then
    7. If MessagePointer < 100 Then
    8. MessagePointer = MessagePointer + 1
    9. End If
    10. Message(MessagePointer) = wParam
    11. End If
    12. Case Else
    13. 'All other messages we don't care about, so we want to send
    14. 'it on to it's normal location (which is stored in ProcPrev)
    15. WndProc = CallWindowProc(ProcPrev, hwnd, msg, wParam, lParam)
    16. End Select
    17. End Function


    Du leitest die Nachricht nur weiter, wenn Sie nicht 3074 ist. Daher wird kein anderes Window diese 3074er Nachricht mehr erhalten.

    LG
    Das ist meine Signatur und sie wird wunderbar sein!

    Trade schrieb:

    Noim schrieb:

    [...] Objektname und Objektwert sind Pointer auf nullterminierte Strings.
    Pointer zeigen auf Adressen im Speicher. Wenn Du nun den Pointer inkrementierst (oder dessen Index im Indexer), um die einzelnen Chars des Strings aus dem Speicher zu lesen (*ptr[i]) bzw. (*ptr++), kann es passieren, dass Du zu weit in den Speicher einer anderen Anwendung reinliest. -> AccessViolation. Deshalb ist das \0 da ein entsprechender Indikator für Funktionen.
    Muss nat. nicht sein, aber es läuft halt auf jeden Fall dann nicht wie erwartet und Du gibst so die Länge vor.
    Aber back to the problem.

    Grüße


    OMG, ich kann es nicht glauben. Habe es heute noch einmal nach dieser langen Zeit probiert und bin etwas weiter gekommen, dank dieses Postes. Ich habe ihn damals einfach nicht verstanden und ignoriert, aber diesmal hat er mir geholfen. Ich wusste einfach damals nicht was ein Pointer ist, da ich nie mit C gearbeitet hatte. Da ich es jetzt aber weiß, konnte ich dann im Internet weiter recherchieren und habe dort gefunden, das man um auf eine c dll funktion mit einem char* als Argument mit hilfe eines String Builder drauf zugreifen kann (Schlecht formuliert). Also habe ich es so versucht:

    C#-Quellcode

    1. [DllImport("homeputer.dll")]
    2. private static extern int homeputer_ChangedObjects(StringBuilder s);
    3. //...
    4. StringBuilder s = new StringBuilder();
    5. homeputer_ChangedObjects(s);
    6. mf.log(s.ToString());

    Und siehe da:


    Also bin ich mal etwas weiter gekommen, tja auch programmieren braucht seine Zeit.

    us4711 schrieb:

    Das schaut ja wirklich interessant aus.
    Welche Hardware wird denn damit gesteuert, und wie ist diese an die Zentrale angebunden? Wäre ein Projekt, das mich interessieren könnte.


    Diese Software ist schon alte die ich da nutze. Homeputer Studio. Da hinter läuft der FHZConnector, der sobald wenn sich ein Value im Homeputer Studio verändert, und wenn er auch in der Ini Datei des FHZConnector eingetragen ist, ein Signal zu einem Gerät namens XPort mit der ID, die auch in der INI Datei festgelegt wurde, und an dem/der XPort ist ein Analog zu Digital Wandler rangelötet und dieser leitet ein Signal durchs Haus an weitere Schaltkästen die der Vorbesitzer selbst geätzt hat. Im Haus wurden anstatt den normalen 3 Kabeln, 5 verlegt, 1 weiteres für eine Spannungsversorgung der Schaltkästen, und eins was an dem Wandler angeschlossen ist und die Signale annimmt. Ich weiß nicht ob du dir darunter etwas vorstellen kannst. Auch wir haben bis Heute durch eine nicht wirklich vorhandenen Beschreibung Probleme. Auf jeden Fall so, oder ähnlich ist es bei uns aufgebaut. Ich will es nur erweitern, da gerade diese Schaltkästen ja einmalig sind und falls einer kaputt geht muss endlich mal eine Alternative stehen.
    Da beneide ich Dich nicht. Viel Erfolg (und auch Glück) bei der Aufarbeitung der Hinterlassenschaften.
    Kann es aber sein, dass durch die Einheit von Stromverorgungs- und Datenkabeln bei Schaltvorgängen im Starkstromnetz Fehlmeldungen erfolgen? Das könnte dann ja zu falschen Schalt- und Regelvorgängen führen.
    Edit:
    Wie ist denn dieser XPORT an den PC angeschlossen?
    Edit 2:
    Ist es DIESES Teil?
    Du musst aber auch sicher gehen, dass du für deine String-Informationen genügend Speicher zur Verfügung stellst.
    Die Dokumentation ist da etwas spärlich(Und ehrlich gesagt scheint der Aufbau sowieso dämlich zu sein), aber Sinnvoll wäre vlt ein vorheriger Aufruf von "homeputer_ChangeCount" und die größes des Stringbuilders auf ein vielfachen dessen zu setzen:

    C#-Quellcode

    1. StringBuilder s = new StringBuilder(homeputer_ChangeCount() * 32);//Annahme ein Objekt belegt maximal 31 Bytes(+1 Trennzeichen Semikolon)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

    jvbsl schrieb:

    Du musst aber auch sicher gehen, dass du für deine String-Informationen genügend Speicher zur Verfügung stellst.
    Die Dokumentation ist da etwas spärlich(Und ehrlich gesagt scheint der Aufbau sowieso dämlich zu sein), aber Sinnvoll wäre vlt ein vorheriger Aufruf von "homeputer_ChangeCount" und die größes des Stringbuilders auf ein vielfachen dessen zu setzen:

    C#-Quellcode

    1. StringBuilder s = new StringBuilder(homeputer_ChangeCount() * 32);//Annahme ein Objekt belegt maximal 31 Bytes(+1 Trennzeichen Semikolon)


    Könnte ich machen, doch was ist wenn homeputer_ChangeCount() 0 ist ? Ich kann ja keinen Stringbuilder mit 0 bytes erstellen :D oder ?

    @us4711
    Übers Netzwerk, und ja dieses Teil ist es. Und Fehler selber sind noch nicht aufgetaucht.