C# týden C# týden
Pořádné programy s pořádnou klávesnicí zdarma. Více zde
Pouze tento týden sleva až 80 % na C# .NET
Avatar
Maros2470
Člen
Avatar
Maros2470:13.2.2018 8:05

Zdravím. Přepisuji si program na revizi spotřebičů včetně komunikace s měřícím přístrojem. Při přepisování třídy pro komunikaci jsem narazil na problém v kódu, se kterým si nevím rady. Můžete mi někdo poradit?

[DllImport("FTD2XX.dll")]
        private static extern unsafe REVEXprofi.FT_STATUS FT_ListDevices(void* pvArg1, void* pvArg2, uint dwFlags);

        [DllImport("FTD2XX.dll")]
        private static extern unsafe REVEXprofi.FT_STATUS FT_ListDevices(uint pvArg1, void* pvArg2, uint dwFlags);
[DllImport("FTD2XX.dll")]
        private static extern unsafe REVEXprofi.FT_STATUS FT_OpenEx(void* pvArg1, uint dwFlags, ref uint ftHandle);

        [DllImport("FTD2XX.dll")]
        private static extern REVEXprofi.FT_STATUS FT_Close(uint ftHandle);

        [DllImport("FTD2XX.dll")]
        private static extern unsafe REVEXprofi.FT_STATUS FT_Read(uint ftHandle, void* lpBuffer, uint dwBytesToRead, ref uint lpdwBytesReturned);

        [DllImport("FTD2XX.dll")]
        private static extern unsafe REVEXprofi.FT_STATUS FT_Write(uint ftHandle, void* lpBuffer, uint dwBytesToRead, ref uint lpdwBytesWritten);

Problém je v těchto úescích: FT_ListDevices, FT_OpenEx, FT_Read, FT_Write.
Text výjimky: Nebezpečný kód může vzniknout jenom při kompilaci s přepínačem /unsafe.

Díky

 
Odpovědět 13.2.2018 8:05
Avatar
Maros2470
Člen
Avatar
Odpovídá na ostrozan
Maros2470:13.2.2018 9:04

Díky. Ještě jsem narazil na jeden problém v tomto kódu.

private unsafe bool SearchAndConnectREVEXprofi()
        {
            if (this.COMPortNameGlobal != "")
            {
                if (this.COMport.IsOpen)
                    return false;
                this.COMport.PortName = this.COMPortNameGlobal;
                if (!((IEnumerable<string>)SerialPort.GetPortNames()).Contains<string>(this.COMPortNameGlobal))
                    return false;
                try
                {
                    this.COMport.Open();
                }
                catch
                {
                    return false;
                }
                return true;
            }
            byte[] bytes = new byte[64];
            uint num;
            this.ftStatus = REVEXprofi.FT_ListDevices((void*)&num, (void*)null, 2147483648U);
            if (this.ftStatus == REVEXprofi.FT_STATUS.FT_OK)
            {
                for (int index = 0; (long)index < (long)num; ++index)
                {
                    fixed (byte* numPtr = bytes)
                    {
                        this.ftStatus = REVEXprofi.FT_ListDevices((uint)index, (void*)numPtr, 1073741826U);
                        if (this.ftStatus == REVEXprofi.FT_STATUS.FT_OK && new ASCIIEncoding().GetString(bytes).ToLower().Contains("revexprofi"))
                        {
                            this.ftStatus = REVEXprofi.FT_Open((uint)index, ref this.m_hPort);
                            return this.ftStatus == REVEXprofi.FT_STATUS.FT_OK;
                        }
                        // ISSUE: __unpin statement
                        __unpin(numPtr);
                    }
                }
            }
            return false;
        }

Jedná se o toto: __unpin(numPtr);

Můžeš mi poradit co s tím?
Díky

 
Nahoru Odpovědět 13.2.2018 9:04
Avatar
Luboš Běhounek Satik
Autoredaktor
Avatar
Odpovídá na Maros2470
Luboš Běhounek Satik:13.2.2018 10:25

unpin muzes nejspis ignorovat

Nahoru Odpovědět  +1 13.2.2018 10:25
https://www.facebook.com/peasantsandcastles/
Avatar
Maros2470
Člen
Avatar
Odpovídá na Luboš Běhounek Satik
Maros2470:13.2.2018 10:36

Takže úplně vymazat?

 
Nahoru Odpovědět 13.2.2018 10:36
Avatar
ostrozan
Redaktor
Avatar
Odpovídá na Maros2470
ostrozan:13.2.2018 10:42

asi to je někde v těch knihovnách a ty to nemáš naimportované
ale taky jsem se ještě nesekal s tím, že by se "fixovaný" ukazatel extra rušil

 
Nahoru Odpovědět 13.2.2018 10:42
Avatar
ostrozan
Redaktor
Avatar
Odpovídá na Maros2470
ostrozan:13.2.2018 11:14

no spíš zaremovat s nějakým komentářem - pokud neverzuješ (git apod.)

 
Nahoru Odpovědět 13.2.2018 11:14
Avatar
Luboš Běhounek Satik
Autoredaktor
Avatar
Odpovídá na Maros2470
Luboš Běhounek Satik:13.2.2018 13:17

To same, co mel delat unpin, tady resi prave konec toho fixed statementu -> smazat.

Editováno 13.2.2018 13:17
Nahoru Odpovědět 13.2.2018 13:17
https://www.facebook.com/peasantsandcastles/
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.