přeskoč na obsah stránky
Koutek zakyslého programátora

Zákysy, se kterými jsme se setkali


 

Snažíte se otevřit databázi a dostaváte vyjímku s rozličnymi komentáři o chybě v metodě ISAM ?


Chyba bude v 90% připadů v připojovacim řetezci, poskytovatele ho asi moc nekontroluji a připadna chyba v ceste k databázovemu souboru nebo něco podobneho je zaskočí:)
************************************



Přímý přístup na porty ?


Jde to snadněji, než se zdá i v komplikovaném systemu Windows NT s jeho LPC architekturou.

using System;
using System.Runtime.InteropServices;
public class PortAccess
{
(DllImport("inpout32.dll", EntryPoint="Out32"))
public static extern void Output(int adress, int value);
}

PortAccess.Output(888, 255);

************************************



Chcete v C++ spočítat pamět, kterou vᚠprogram opravdu zabíra ?


Tak zkuste následujíci funkci:

DWORD GetPagesSize(DWORD PID)
{
MEMORY_BASIC_INFORMATION myMBI;
BOOL BAddrOK,FreeOK,ReservedOK;
DWORD ThisValueWillBeReturned=0;
HANDLE p=OpenProcess(PROCESS_ALL_ACCESS,false,PID);
for (DWORD CountForPages=0;VirtualQueryEx(p,(LPCVOID) (CountForPages+1),& myMBI,sizeof(MEMORY_BASIC_INFORMATION));CountForPages=(DWORD)myMBI.BaseAddress + myMBI.RegionSize + 1)
{
BAddrOK=((DWORD)myMBI.RegionSize);
FreeOK= (myMBI.State != MEM_FREE);
ReservedOK=((myMBI.State != MEM_RESERVE);
if ( BAddrOK && FreeOK && ReservedOK)
{
ThisValueWillBeReturned += myMBI.RegionSize;
}
}
return ThisValueWillBeReturned;
}

************************************



Funguje vám podivně funkce RegisterChannel a UnRegisterChannel ?


Ano ano, microsoft tady udělal malinkou chybičku. Register channel funguje správně, ale UnRegisterChannel vᚠzaregistrovaný kanál neodpojí ve chvili voláni funkce. Dokonce máme podezření, že to udělá až po ukončení threadu nebo programu. Prostě s tím musíte počítat a zařídit se jinak..... Bohužel
************************************



ProcessWaitForIdle se vraci dřív, nez je vytvořeno hlavní okno ?


Za WaitForIdle přidejte:
for(int i=0;i < 200;i++)
{
Thread.Sleep(100);
Process proc = System.Diagnostics.Process.GetProcessById(HostProcess.Id);
Trace.Write(proc.MainWindowHandle.ToString()+"\r\r");
if (proc.MainWindowHandle != IntPtr.Zero) break;
}

************************************



Trápí vás ve Windows7 či Vistách hláška : Server vrátil odkaz ?


Není to právě programátorská záležitost, ale řešení není úplně jednoduché, pokud nejste vyzbrojeni googlem a trpělivostí:) Musíte do Místních zásad zabezpečení, najít zde Místní zásady-Možnosti zabezpečení a tam položku Řízení uživatelských účtů:Zvýšit oprávnění pouze u... nastavte na Zákázáno, hotovo
************************************



Ve webových stránkách server hlásí chybu 0x80070032 ?


V IIS není pravděpodobně zprovozněn dotnet. Pokud není nainstalovaný, instalujte...jinak nápravu zjednáte pro Windows 7 v Programy a funkce kde vyhledáte funkce systému a zapnete asp.NET a dále pro všechny ostatní operační systémy zaregistrujete .NET pomocí příkazu na příkazové řádce:
%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i
%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i
%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -i
%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_regiis.exe -i
************************************



Rada nad zlato

Život vývojáře softwaru není snadný. Velmi často se dostáváme do situací, ze kterých nám šediví vlasy a korodují nervy. Ano mluvíme zde o klaccích, jež nám často svět počítačů hází pod nohy - bugy, chyby, nelogičnosti. Protože jsme již starší pánové a informace, kterých jsme za léta nasbírali úctyhodné kvantum, se nám z mozkoven občas trousí, naučili jsme se zapisovat si řešení každého problému, kterým nám dal zabrat. Rádi bychom se s vámi o tyto postupy pro chvíle bezradnosti podělili.