C# ja suora muistiosoite

überkoodari

Visual C# 2005

Homman nimi on sellainen että pitäisi jotenkin saada pointteriin suora muistiosoite joka on tallennettuna int-muuttujaan. Eräs ActiveX-komponentti palauttaa funktiolla käsittelemänsä tiedon muistiosoitteen (C long-tyyppisesnä, mutta taitaa olla int C#:ssa).

Esim. tyyliin.

unsafe koodia...jne..plaaplaa
{
int *ptr;
int osoite = 3243290490; // hatusta vetäsin

ptr = osoite; /* Tässä kohtaa mennään metsään, kun C# ei ymmärrä */

}

Kääntäjä valittaa seuraavaa: Cannot implicitly convert 'int' to 'int*'. An explicit conversion exists (are you missing a cast?)

Onko olemassa jotain kikka kolmosta ongelman ratkaisemiseksi? Muuten tekisin ohjelman C :lla mutta kun rahkeet ei riitä C :ssa muuhun kuin konsoliohjelmien tekoon ja mikro-ohjainten ohjelmointiin (c-kieli).

Visual Basicilla sain kyllä moisen tempun tehtyä vaikka se on vielä vähemmän osoitin-ystävällinen. Ainut vaan että Basic on tehoton kieli nopeaan prosessointiin, mihin olisi tarvetta. Mitä tehokkaampi kieli, sitä vaikeampaa on, ainakin aluksi.. :) Tarkoitus on kyllä sitä c :kin opiskella (nytkin pari kirjaa lainassa), mutta kun se alku on aina hankalaa.... Snif..

7

1800

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • kjhg

      Tyyppimuunnoksen kanssa pitäisi toimia:

      unsafe
      {
      int* ptr;
      int osoite = 3243290490;
      ptr = (int*)osoite;

      }

      • überkoodari

        Sehän tuli kuin apteekin hyllyltä! Kiitos todella paljon!

        Noin se tosiaan toimii.. On todella "hurjaa" kun C#-kielessä joutuu kirjoittamaan "unsafe"-koodia osoittimien kanssa. Kielen pitäisi olla muka helpompaa, mutta vaikeammaksihan se menee kun helppouden muuria joutuu särkemään..

        Noh, joka kielessä on omat jipponsa; ei auta itku markkinoilla. :)

        Ihan uteliaisuudesta: sattuukohan kukaan tietämään miten osoittimet saa käyttöön javalla (visual j#)? :D

        Kumpi on mielestänne hyödyllisempi kieli: java vai C#? Itse touhuilen pääasiassa sulauttujen järjestelmien/sovellusten kanssa (= elektroniikkaa mukana), eli sellaisessa tarkoituksessa. Mitään pelejä tms. ei ole tarkoitus väsäillä, lähinnä videokuvaa tai ääntä analysoida.


    • kjhg

      Periaatteessa *- merkki tulee tyypin perään eikä osoittimen nimen eteen kuten sen kirjoitit. Jos rivillä esitellään vain yksi osoitin, ei tosin tule virhettä, koska välilyöntien paikoilla ei ole merkitystä.

      int* p1, p2, p3; // Näin
      int *p1, *p2, *p3; // Ei käänny

      • überkoodari

        Kiitti vielä tästäkin vinkistä. Hieman juurtunut tuo osoittimien käyttö c-puolelta.. :)


      • näin?

        int* p1, p2, p3; // Näin
        int *p1, *p2, *p3; // Ei käänny
        ------------

        Onko todellakin noin? Jos on, kielen kehittäjät eivät ole liikaa vaivautuneet säilyttämään c/c :n esittelymuotoja.


      • überkoodari
        näin? kirjoitti:

        int* p1, p2, p3; // Näin
        int *p1, *p2, *p3; // Ei käänny
        ------------

        Onko todellakin noin? Jos on, kielen kehittäjät eivät ole liikaa vaivautuneet säilyttämään c/c :n esittelymuotoja.

        Ainakaan äkkiseltään kun kokeilin, niin ei toiminut. C#-kielessä on jotain tuollaista pientä hämärää, joka kummastuttaa jos siirtyy esim. c/c puolelta suoraan..


      • Mika0800

        vertailu:

        char* s1, s2, s3; // Loogisesti oikeaoppinen tapa, mutta hyvin harva C -ohjelmoija kirjoittaa näin.


        char *s1, *s2, *s3; // C-kieliohjelmoijien eniten käyttämä tapa, vaikka onkin erittäin epälooginen.


        C -kääntäjä yleensä hyväksyy kumman tahansa tavan käytön.

        harjoitustehtävä:

        kirjoita funktio, joka muuntaa kumman tahansa em. merkkijonoista tällaiseksi:

        "char* s1, s2, s3;"


    Ketjusta on poistettu 1 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Nasima löi Jussille luun kurkkuun

      Nasima kertoi ettei Jussi sovi puhemieheksi, koska sallii rasismin. Mihin toimiin perussuomalaiset ryhtyvät? Kuka nouse
      Maailman menoa
      555
      9188
    2. Razmyar on säälittävä - puhemiehellä ei ole mitään syytä ottaa kantaa tähän "silmäkohuun"

      jonka toimittajat sai aikaan. Asia ei kuulu puhemiehelle millään lailla. Razmyar haluaa taas vaan huomiota. Mutta jos r
      Maailman menoa
      165
      6284
    3. Miten Eerolan silmäkuvat voivat levitä muutamassa tunnissa ympäri maailmaa?

      Seuraako koko maailma persujen ja erityisesti Eerolan somea reaaliajassa? Edes kansanedustajan itsemurha eduskuntatalos
      Maailman menoa
      381
      5350
    4. Siviilipalvelusmies Halla-aho normalisoi rasismin perussuomalaisissa

      SMP:n tuhkille perustettu puolue ei ollut ihmisiä vastaan, vaan instituutiokriittinen. "Missä EU - siellä ongelma", oli
      Perussuomalaiset
      72
      4821
    5. Suomalaisilta vaaditaan valtavasti suvaitsevaisuutta - miksi sitä ei vaadita muslimeilta

      Suomalaisilta vaaditaan kaikkea, pitää olla suvaitsevainen ja hyväksyä vieraiden tavat, rasisti ei saa olla jne. Miksi s
      Maailman menoa
      101
      4443
    6. Juuri Suomen valtamedian toimittajat teki "silmävääntelystä" sen kohun

      ja ilmeisesti ottivat yhteyttä myös ulkomaisiin medioihin, että katsokaas tätä. Mutta Japanin medioissa on asiaan suhta
      Maailman menoa
      166
      4103
    7. SDP:n kansanedustaja Marko Asell: Suomen myönnettävä maahanmuuton ongelmat

      Hänen mielestään Suomen pitää pyrkiä rajoittamaan jyrkästi turvapaikanhakijoiden pääsyä maahan ja hän arvioi, että maaha
      Maailman menoa
      206
      4047
    8. Sinun ja kaivatun nimikirjaimet

      Mitkä ne on ? Meillä H❤️M 👩‍❤️‍👩
      Ikävä
      107
      2191
    9. Onko sinulla ja kaivatulla

      joku yhteinen tärkeä paikka?
      Ikävä
      114
      1578
    10. sä oot ehkä

      maailman omituisin tyyppi
      Ikävä
      53
      1116
    Aihe