VB 2010 - GTA SA:MP API.dll Spielerstandort

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Michi1998XD.

    VB 2010 - GTA SA:MP API.dll Spielerstandort

    Morgen,

    Ich bin gerade dabei einen kleinen Keybinder für GTA SA:MP zu basteln und stehe vor folgendem Problem:

    Ich benutze die API.dll (gta-api.de/) und versuche damit den Standort des Spielers (die Zone wo er sich aufhält) zu ermitteln.
    Ich habe schon in dem Forum der API direkt gefragt und nur herausbekommen wie man das Einbindet.

    Quellcode

    1. Private Declare Function GetZoneName Lib "API.dll" Alias "GetZoneName" (ByRef Text As String) As Integer

    Was mir jedoch noch fehlt und was auch das aktuelle Problem ist, ist dass ich 'GetZoneName' nicht richtig verwenden kann.
    Ich habe alles mögliche versucht, gegoogled und alles aber jedes mal kommt entweder Garnichts oder das Programm stürzt ab.

    Auf der Website direkt stehen nur Anwendungsbeispiele für C++ und AHK.

    Spoiler anzeigen

    wiki.gta-api.de/index.php5/GetZoneName

    AHK:

    Quellcode

    1. GetZoneName(zone)
    2. AddChatMessage("Ich befinde mich in dem Stadtteil: " zone)


    C++:

    Quellcode

    1. char zonename[30] = { 0 };
    2. char msg[60] = { 0 };
    3. char *p = (char*)zonename;
    4. GetZoneName(p);
    5. sprintf_s(msg, "Ich befinde mich in dem Stadtteil: %s", zonename);
    6. AddChatMessage(msg);



    Wenn mir das jemand 'Übersetzen' könnte oder direkt eine Lösung da hätte, wäre das natürlich sehr Geil.

    MfG
    Michi
    Hab deine Frage auch in deren Forum gefunden und mir dort mal die Kommentare durchgelesen.
    Ich vermute, dass die aufgerufene Funktion, wie dort der User Slider anmerkt, einen Pointer zurückgibt. Als jemand, der hauptsächlich unter C# unterwegs ist, würde ich nun nen unsafe Block verwenden, den gibt es unter VB jedoch nicht (Quelle). Leider weiß ich nicht welche anderen Methoden es unter VB gibt, um Pointer zu verwenden.
    Höchstens kann man mit Marshalling oder so arbeiten, aber ob da was geht, weiß ich nicht.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Willkommen im Forum. :thumbup:

    Michi1998XD schrieb:

    VB.NET-Quellcode

    1. (ByRef Text As String)
    Gugst Du hier, da siehst Du, wie Strings von .NET an eine C++-DLL übergeben werden können.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo und Wilkommen :)

    1. Ist die Signatur richtig
    ​Private Declare Function GetZoneName Lib "API.dll" Alias "GetZoneName" (ByRef Text As String) As Integer

    2. In der Signatur musst du einen Parameter Angeben, als String. In diesen Sollte der Name der Zone geschrieben werden. So Vermute ich das mal.
    Meine Projekte Genesis Game Engine | GFX | smartli.me - Der smarte URL shortener

    Andy16823 schrieb:

    In der Signatur musst du einen Parameter Angeben, als String. In diesen Sollte der Name der Zone geschrieben werden. So Vermute ich das mal.
    <br><br>

    Und wie soll man das dann verstehen? Ich geb der Funktion den Namen einer Zone und die Funktion gib mit dann den Namen der Zone, den ich übergeben habe wiederr zurück...oder wie? ?( ?( ?(

    Lg Radinator
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    Nein, du übergibst einen Leeren String und die Funktion erstellt in der Variable den Namen der Zone. Eben wie bei einer Factory
    Meine Projekte Genesis Game Engine | GFX | smartli.me - Der smarte URL shortener

    Andy16823 schrieb:

    erstellt in der Variable den Namen der Zone
    Kann ich mir nicht vorstellen. Da müsste die DLL ja einen .NET-String aufgauen, ansonsten müsstest Du eine maximale Länge mitgeben, wie bei GetPrivateProfileString().
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Okokok...habs mir noch ma durchgelesen, hab mich auch schon gewundert warum da in der wiki steht, dass als Parameterein String oder ein Char-Pointer mitgegeben wird(in dem Fall wars ja ein Charpointer) und warum das (im C++-Code) als leeres Char-Pointer-Array initialisiert wurde :D

    Zumal
    "Diese Funktion schreibt in die übergebene Referenz den Stadtteilname rein, in dem sich der Spieler befindet."
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell

    Andy16823 schrieb:

    habe ich doch geschrieben
    Nö.

    Andy16823 schrieb:

    du übergibst einen Leeren String
    Da müsste der Pointer (IntPtr) auf einen wohldefinierten Text (ich will hier nicht String schreiben) übergeben werden.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!