Avatar billede hyggesen Nybegynder
14. september 2005 - 18:01 Der er 14 kommentarer og
1 løsning

Værdi fra c++ metode

Hvordan henter jeg en værdi ud af denne c++ metode?

long cbUSBDBitIn (int DeviceNum, int PortNum, int BitNum, int
*BitValue)

Det jeg ikke kan hitte ud af er hvad der skal indsættes i paramatren: *BitValue

I DLL library reference står der om paramatren *BitValue:
A pointer to a user-defined integer variable that will receive the state of the
specific bit on return. The data value is either (0) or (1).

Har prøvet med en ref variabel, uden held.
Avatar billede hyggesen Nybegynder
14. september 2005 - 18:04 #1
Her er lidt mere:

[DllImport("cbusb.dll")]
public static extern long cbUSBDBitIn(IntPtr hWnd, int DeviceNum, int PortNum, int BitNum, ref int BitValue);

public int ReadRelay(IntPtr windHandle, RelayNummer Relay)
        {
            int relayNo = (int)Relay;
            int state = 0;
            cbUSBDBitIn(windHandle, this.DeviceNum, 1, relayNo, ref state);
            return state;
        }
Avatar billede arne_v Ekspert
14. september 2005 - 18:10 #2
prøv:

[DllImport("cbusb.dll")]
public static extern long cbUSBDBitIn(IntPtr hWnd, int DeviceNum, int PortNum, int BitNum, IntPtr BitValue);
Avatar billede arne_v Ekspert
14. september 2005 - 18:13 #3
og så Marshal ReadInt32 til at hente den med
Avatar billede hyggesen Nybegynder
14. september 2005 - 19:14 #4
Marshal ReadInt32 ?
Skal det ind i kaldet eller ?

public int ReadRelay(IntPtr windHandle, RelayNummer Relay)
        {
            int relayNo = (int)Relay;
            IntPtr ptr = new IntPtr();
            cbUSBDBitIn(windHandle, this.DeviceNum, 0, relayNo, Marshal.ReadInt32(ptr));
           
            return ptr.ToInt32();;
        }
Avatar billede arne_v Ekspert
14. september 2005 - 19:20 #5
nej

bare

cbUSBDBitIn(windHandle, this.DeviceNum, 0, relayNo, ptr);
Avatar billede arne_v Ekspert
14. september 2005 - 19:20 #6
Marshal.ReadInt32(ptr)

er en anden måde at lave

ptr.ToInt32()

Avatar billede hyggesen Nybegynder
14. september 2005 - 19:50 #7
Har dette:

[DllImport("cbusb.dll")]
public static extern long cbUSBDBitIn(IntPtr hWnd, int DeviceNum, int PortNum, int BitNum, IntPtr BitValue);

public int ReadRelay(IntPtr windHandle, RelayNummer Relay)
        {
            int relayNo = (int)Relay;
            IntPtr ptr = new IntPtr();
            cbUSBDBitIn(windHandle, this.DeviceNum, 0, relayNo, ptr);

            return ptr.ToInt32();
        }

Men den returnerer værdien 0, dvs. den aldrig modtager en værdi.
ptr skulle gerne trække værdien 1 eller 0 ud af metoden, men den er aldrig 1.
Avatar billede arne_v Ekspert
14. september 2005 - 21:20 #8
hvad er retur værdien for funktionen ?
Avatar billede hyggesen Nybegynder
15. september 2005 - 07:06 #9
Den er long.
Men den hælder bare en masse ubrugelige tal ud...!
Det er meningen funktionen skal returnere Current state på en indgang eller et relæ(PortNum).

Her er funktionen fra filen cbUSB.h:

long EXTCCONV cbUSBDIn (int DeviceNum, int PortNum, int *DataValue);
Avatar billede hyggesen Nybegynder
15. september 2005 - 07:20 #10
Rettelse:

Her er funktionen fra filen cbUSB.h:

long EXTCCONV cbUSBDBitIn (int DeviceNum, int PortNum, int BitNum, int *BitValue);
Avatar billede arne_v Ekspert
15. september 2005 - 08:42 #11
jeg er vist løbet tør for gode ideer
Avatar billede hyggesen Nybegynder
15. september 2005 - 08:59 #12
Ok tak alligevel...! Jeg roder videre med problemet og poster løsningen her hvis den findes...! ;-)
Avatar billede hyggesen Nybegynder
15. september 2005 - 13:43 #13
Løsning fundet!
Metoden skulle blot tilgås uden brug af IntPtr der var skyld i at maskinen simpelhen gik ned når jeg forsøgte at kalde metoden.

Løsning:

[DllImport("cbusb.dll")]
private static extern long cbUSBDBitIn(int DeviceNum, int PortNum, int BitNum, ref int BitValue);

public int ReadRelay(RelayNummer Relay)
{
    int relayNo = (int)Relay;
    int state = 0;
    cbUSBDBitIn(this.DeviceNum, 0, relayNo, ref int state);

    return state;
}

>>arne_v

Tak for hjælpen..!

Du kan jo lige kaste et svar afsted og få dine points alligevel...!

Hygge...
Avatar billede arne_v Ekspert
15. september 2005 - 21:39 #14
det troede jeg at du havde prøvet ??
Avatar billede arne_v Ekspert
15. september 2005 - 21:39 #15
jeg kan godt ligge et svar men jeg er nu meget usikker på hvad jeg måtte
have bidraget med
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