Avatar billede andersbodilsen Nybegynder
16. marts 2004 - 18:46 Der er 27 kommentarer og
1 løsning

kan ikke referere til en struct

Hej jeg sidder og roder med denne struct:

public struct st_feedback
{
    byte pic_status;
    byte status_valid;
        byte status_usrcmd;
    short crc_error_count;
};

Den er defineret under
public class Form1 : System.Windows.Forms.Form

Den del er der ingen brok over, men når jeg skal bruge den længere nede i en radioButton kan jeg til "int bytesRec = sockets.sender.Receive(feedbacks);"
virker skidtet ikke.
Det skal tilføjes jeg oprettet objektet
"st_feedback feedbacks = new st_feedback();" under radioButton.

Hvorfor virker det ikke???
Avatar billede arne_v Ekspert
16. marts 2004 - 18:50 #1
Kan du uddybe "virker skidtet ikke" ?
Avatar billede andersbodilsen Nybegynder
16. marts 2004 - 19:18 #2
C:\Documents and Settings\Admin\Skrivebord\IPAQ_BAK\Form1.cs(371): The name 'feedbacks' does not exist in the class or namespace 'IPAQ.Form1'

eller

C:\Documents and Settings\Admin\Skrivebord\IPAQ_BAK\Form1.cs(423): The best overloaded method match for 'System.Net.Sockets.Socket.Receive(byte[])' has some invalid arguments
Avatar billede arne_v Ekspert
16. marts 2004 - 19:23 #3
Lyder som feedbacks ikke er i scope de hvor du bruger den.
Avatar billede andersbodilsen Nybegynder
16. marts 2004 - 19:24 #4
private void radioButton1_CheckedChanged(object sender, System.EventArgs e)
{   
    st_feedback feedback = new st_feedback();
    byte[] bytes = new byte[16];
    byte[] msg = new byte[16];
    msg[0] = netdaemon.NET_M_RUN + netdaemon.FEEDBACK;

    if (radioButton1.Checked == true )
    {
        int i = sockets.sender.Send(msg, 0, 1, SocketFlags.None);
        int bytesRec = sockets.sender.Receive(feedbacks);

    }
}
Avatar billede arne_v Ekspert
16. marts 2004 - 19:26 #5
hov

der er ikke noget s i erklæringen
Avatar billede arne_v Ekspert
16. marts 2004 - 19:27 #6
st_feedback feedback = new st_feedback(); // uden s

int bytesRec = sockets.sender.Receive(feedbacks); // med s
Avatar billede andersbodilsen Nybegynder
16. marts 2004 - 19:35 #7
sorry, min fejl... jeg havde glemt at fjerne det da jeg testede.

Nu kommer denne fejl:

C:\Documents and Settings\Admin\Skrivebord\IPAQ_BAK\Form1.cs(423): The best overloaded method match for 'System.Net.Sockets.Socket.Receive(byte[])' has some invalid arguments
Avatar billede arne_v Ekspert
16. marts 2004 - 19:38 #8
Jeg tror at du skal have konverteret den struct til byte[] for at kunne
sende den.
Avatar billede andersbodilsen Nybegynder
16. marts 2004 - 19:43 #9
pis, det er jo ekstra arbejde. Kan man godt bygge et byte[] op på samme måde som et struct????
Avatar billede arne_v Ekspert
16. marts 2004 - 19:44 #10
Jeg har før brugt disse 3 metoder:

        public static byte[] Object2ByteArray(Object o)
        {
                MemoryStream ms = new MemoryStream();
                BinaryFormatter bf = new BinaryFormatter();
                bf.Serialize(ms, o);
                return ms.ToArray();
        }
        public static object ByteArray2Object(byte[] theByteArray)
        {
                MemoryStream ms = new MemoryStream(theByteArray);
                BinaryFormatter bf = new BinaryFormatter();
                ms.Position = 0;
                return bf.Deserialize(ms);
        }
Avatar billede andersbodilsen Nybegynder
16. marts 2004 - 19:45 #11
min nuværende:

public struct st_feedback
    {
        byte pic_status;
        byte status_valid;
        byte status_usrcmd;
        short crc_error_count;
    };
Avatar billede arne_v Ekspert
16. marts 2004 - 19:47 #12
Prøv med:

int bytesRec = sockets.sender.Receive(Object2ByteArray(feedbacks));
Avatar billede andersbodilsen Nybegynder
16. marts 2004 - 19:59 #13
mener du sådan her:

st_feedback feedback = new st_feedback();

int bytesRec = sockets.sender.Receive(st_feedback(feedback));
Avatar billede andersbodilsen Nybegynder
16. marts 2004 - 20:01 #14
det giver:

kode:
public byte[] st_feedback()
    {
        byte pic_status;
        byte status_valid;
        byte status_usrcmd;
        short crc_error_count;
    }
fejl:
C:\Documents and Settings\Admin\Skrivebord\IPAQ_BAK\Form1.cs(49): 'IPAQ.Form1.st_feedback()': not all code paths return a value

Kode:
st_feedback feedback = new st_feedback();

Fejl:
C:\Documents and Settings\Admin\Skrivebord\IPAQ_BAK\Form1.cs(359): 'IPAQ.Form1.st_feedback()' denotes a 'method' where a 'class' was expected
Avatar billede arne_v Ekspert
16. marts 2004 - 20:03 #15
Nej jeg mener præcis som jeg skrev 19:47:00 (du skal så bare hapse
den Array2ByteArray metode også).
Avatar billede arne_v Ekspert
16. marts 2004 - 20:09 #16
Det bør virke.

Så skal den i den anden ende kun udpakke rigtigt.
Avatar billede burningice Nybegynder
16. marts 2004 - 20:15 #17
andersbodilsen>> prøv

public struct st_feedback
{
    byte pic_status;
    byte status_valid;
        byte status_usrcmd;
    short crc_error_count;

    public byte[] ToByte()
    {
                MemoryStream ms = new MemoryStream();
                BinaryFormatter bf = new BinaryFormatter();
                bf.Serialize(ms, this);
                return ms.ToArray();
    }
}

private void radioButton1_CheckedChanged(object sender, System.EventArgs e)
{   
    st_feedback feedback = new st_feedback();
    byte[] bytes = new byte[16];
    byte[] msg = new byte[16];
    msg[0] = netdaemon.NET_M_RUN + netdaemon.FEEDBACK;

    if (radioButton1.Checked == true )
    {
        int i = sockets.sender.Send(msg, 0, 1, SocketFlags.None);
        int bytesRec = sockets.sender.Receive(feedbacks.ToByte());

    }
}
Avatar billede andersbodilsen Nybegynder
16. marts 2004 - 20:43 #18
cyberfessor ->

jeg har til føjet det du skrev +
using System.Runtime.Serialization.Formatters.Binary;

denne fejl kommer når det køres:

C:\Documents and Settings\Admin\Skrivebord\IPAQ_BAK\Form1.cs(72): The type or namespace name 'BinaryFormatter' could not be found (are you missing a using directive or an assembly reference?)
Avatar billede arne_v Ekspert
16. marts 2004 - 20:46 #19
using System.Runtime.Serialization.Formatters.Binary;
Avatar billede arne_v Ekspert
16. marts 2004 - 20:48 #20
Den er i .NET core, så den skal være der.
Avatar billede burningice Nybegynder
16. marts 2004 - 20:48 #21
hm.... du bruger Compact Framework?... kan være den ikke findes der :/
Avatar billede andersbodilsen Nybegynder
16. marts 2004 - 20:49 #22
er det ikke den jeg har skrevet 20:43:31????
Avatar billede andersbodilsen Nybegynder
16. marts 2004 - 20:52 #23
øhh??? Det er et Smart Device APP. Har det noget at sige???
Avatar billede arne_v Ekspert
16. marts 2004 - 20:56 #24
No idea
Avatar billede burningice Nybegynder
16. marts 2004 - 21:03 #25
mit eneste bud til hvorfor at den ikke kan finde BinaryFormatter... for slår man op i sdk'et er .NET Compact Framework - Windows CE .NET ikke understøttet
Avatar billede andersbodilsen Nybegynder
16. marts 2004 - 21:07 #26
så ingen  BinaryFormatter.... Hvordan kommer jeg så ud af denne ubehagelige situation??
Avatar billede arne_v Ekspert
16. marts 2004 - 21:14 #27
Avatar billede andersbodilsen Nybegynder
18. marts 2004 - 08:14 #28
Jeg har selv fusket mig ud at den.... Jeg valgte at modtage den som et byte[], for derefter selv at lægge den over i den struct, som jeg ville have den i....

Men ellers tak for indsatsen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester