Jag undrar bara om det finns några nackdelar med att använda API funktioner ?? Det beror ju på vilka API du använder, vissa stöds inte av alla Windowsversioner osv. Annars kan jag inte komma på någon nackdel. Förutom att de är vanligtvis krångliga och deras dåliga mappning mot vb's datatyper ?? >Jag undrar bara om det finns några nackdelar med att använda API funktioner ?? > Att du inte längre har den säkerhet som du får när du håller dig > Jag undrar bara om det finns några nackdelar med att använda API Antar att du har ett stort förtroende för de personer som skapat api-funktionerna. Vilka är det som skapat windows API? > Antar att du har ett stort förtroende för de personer som skapat api- > Går det lika bra att använda WinAPI i C++ som i C? Det är sant att du även kan göra dosprogram i C eftersom du kan använda C till allt. VB går däremot bara att ha till vissa saker. Har ändrat i VB-koden så att jämförelsen blir rättvis. (man behöver ju inte alla konstanterna) > Har ändrat i VB-koden så att jämförelsen blir rättvis. (man behöver ju Som jag nämnde ovan kan man skriva C-kod lite hur man vill, och som ett exempel på det kan jag visa ett program skrivet av Glyn Anderson i Indonesien. Programmet tar en text och gör om den till internationellt "flaggspråk", dvs visar med en liten gubbe på skärmen hur man bokstaverar det med en signalflagga i var hand. Ganska festligt. Men är det inte krångligare att skriva windowsprogram i C/C++ än i VB? > Men är det inte krångligare att skriva windowsprogram i C/C++ än i VB? >En konstig sak i Basic är t.ex. att tilldelningsoperatorn och Hajjsan!!Nackdelar med API??
Finns det något man bör tänka på ?? t.ex vilken version av windows man använder eller??
/KristerSv: Nackdelar med API??
/JohanSv: Nackdelar med API??
Sv: Nackdelar med API??
Att du inte längre har den säkerhet som du får när du håller dig till "ren" VB. Jag tror det var Dan Appleman som påstod att det inte gick att krascha ett VB program när du bara använder spåkets inbyggda funktioner. En sanning med modifikation kanske, men han har en poäng. När du anropar API funktioner har du inte längre det skyddsnätet. Frihet under ansvar som det brukar heta.
MSSv: Nackdelar med API??
> till "ren" VB. Jag tror det var Dan Appleman som påstod att det inte
> gick att krascha ett VB program när du bara använder spåkets
> inbyggda funktioner.
*fniss*
Vad han menar är att när du håller dig till "ren" VB så =kan= du inte ta ansvar för det du gör utan du är utelämnad till att MS tog sitt ansvar när de konstruerade VB (alla med fullt förtroende för MS räcker upp en hand).
Anropar du api-funktionerna direkt så =kan= (och ska) du ta ansvar för vad du gör.Sv: Nackdelar med API??
> funktioner ??
Om du verkligen vill använda Winapi bör du lära dig språket C, för där använder man bara api. Då slipper du alla begränsningar VB inför och du behöver inte skicka några dll-filer med ditt program, utan allt som behövs är bara programmets exe-fil som på sin höjd blir kanske 30 kB.
Meningen med VB är ju att man ska slippa använda winapi:t själv, utan det gör VB åt en. VB förenklar för programmeraren genom att lämpa över jobb på datorn. Det är därför det behövs extra dll-filer och programmen blir långsamma.
Så, den enda nackdelen är väl att det blir en massa bök. Winapi är inte gjort för att användas med VB, utan det är skrivet för att användas i C.Sv: Nackdelar med API??
Sv: Nackdelar med API??
> funktionerna.
Nej, det har jag inte. Det är just därför jag inte vill använda deras påhitt mer än nödvändigt.Sv: Nackdelar med API??
Ja. C ingår i C++.Sv: Nackdelar med API??
>Om du verkligen vill använda Winapi bör du lära dig språket C, för där
>använder man bara api. Då slipper du alla begränsningar VB inför och
>du behöver inte skicka några dll-filer med ditt program, utan allt som
>behövs är bara programmets exe-fil som på sin höjd blir kanske 30 kB.
Varför är det bättre med C istället för VB och hur anropar man ett APi i C ?? VB är väl gjort för ett grafiskt gränssnitt medan C är mer för DOS eller??
/KristerSv: Nackdelar med API??
API är skrivet i C, för C. Därför kan man anropa alla api-funktioner direkt utan några problem. Det är inte som i VB att du måste definiera saker eller göra om variabler, utan allt är redan färdigt, så det är bara att köra.
Exempelvis:
<code>
int result;
if (result = MessageBox(hWnd, "Text", "Överskrift", MB_YESNOCANCEL | MB_ICONEXCLAMATION) == IDYES)
{
/* Användaren tryckte "ja". */
}
else if (result == IDNO)
{
/* Användaren tryckte "nej". */
}
else
{
/* Användaren tryckte "avbryt". */
}
</code>
Ska man göra samma sak i VB blir det så här:
<code>
Declare Function MessageBox Lib "user32.dll" Alias "MessageBoxA" (ByVal hWnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal uType As Long) As Long
Const IDABORT = 3
Const IDCANCEL = 2
Const IDCONTINUE = 5
Const IDIGNORE = 5
Const IDNO = 7
Const IDOK = 1
Const IDRETRY = 4
Const IDTRYAGAIN = 4
Const IDYES = 6
Const MB_ABORTRETRYIGNORE = &H2
Const MB_CANCELTRYCONTINUE = &H2
Const MB_HELP = &H4000
Const MB_OK = &H0
Const MB_OKCANCEL = &H1
Const MB_RETRYCANCEL = &H5
Const MB_YESNO = &H4
Const MB_YESNOCANCEL = &H3
Const MB_ICONASTERISK = &H40
Const MB_ICONERROR = &H10
Const MB_ICONEXCLAMATION = &H30
Const MB_ICONHAND = &H10
Const MB_ICONINFORMATION = &H40
Const MB_ICONQUESTION = &H20
Const MB_ICONSTOP = &H10
Const MB_ICONWARNING = &H30
Const MB_DEFBUTTON1 = &H0
Const MB_DEFBUTTON2 = &H100
Const MB_DEFBUTTON3 = &H200
Const MB_DEFBUTTON4 = &H300
Const MB_APPLMODAL = &H0
Const MB_SYSTEMMODAL = &H1000
Const MB_TASKMODAL = &H2000
Const MB_DEFAULT_DESKTOP_ONLY = &H20000
Const MB_RIGHT = &H80000
Const MB_RTLREADING = &H100000
Const MB_SETFOREGROUND = &H10000
Dim result as long
result = MessageBox(Form1.hWnd, "Text", "Överskrift", MB_YESNOCANCEL or MB_ICONEXCLAMATION)
if result = IDYES then
' Användaren tryckte "ja".
else if result = IDNO then
' Användaren tryckte "nej".
else
' Användaren tryckte "avbryt".
end if
</code>Sv: Nackdelar med API??
int result;
if (result = MessageBox(hWnd, "Text", "Överskrift", MB_YESNOCANCEL | MB_ICONEXCLAMATION) == IDYES)
{
/* Användaren tryckte "ja". */
}
else if (result == IDNO)
{
/* Användaren tryckte "nej". */
}
else
{
/* Användaren tryckte "avbryt". */
}
Ska man göra samma sak i VB blir det så här:
Declare Function MessageBox Lib "user32.dll" Alias "MessageBoxA" (ByVal hWnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal uType As Long) As Long
Const IDNO = 7
Const IDYES = 6
Const MB_YESNOCANCEL = &H3
Const MB_ICONEXCLAMATION = &H30
Dim result as long
result = MessageBox(Form1.hWnd, "Text", "Överskrift", MB_YESNOCANCEL or MB_ICONEXCLAMATION)
if result = IDYES then
' Användaren tryckte "ja".
else if result = IDNO then
' Användaren tryckte "nej".
else
' Användaren tryckte "avbryt".
end if
Okej, du har en poäng, men vilken kod är mer användarvänlig?
i C:
if (result = MessageBox(hWnd, "Text", "Överskrift", MB_YESNOCANCEL | MB_ICONEXCLAMATION) == IDYES)
i VB:
result = MessageBox(Form1.hWnd, "Text", "Överskrift", MB_YESNOCANCEL or MB_ICONEXCLAMATION)
if result = IDYES then
Jag tycker VB koden är mer lättförståelig (jag har dock programmerat lite i C också).
Massa symboler som | och klammrar ({[<>]}) behövs inte lika ofta i VB då BASIC språket gjordes för att vara lättfattat och enkelt.
Samtidigt behöver även C inkludera filer t.ex för att kunna skriva någonting på skärmen måste man (om jag minns rätt) inkludera conio, iomanip och alla såna bibliotek, som jag tycker borde vara inkluderat redan. En blandning mellan C och VB vore bäst, ta nytta av snabbheten i C och enkelheten i VB. (hörde nånstans att C# skulle vara någon blandning av C och VB, skulle vilja prova det...)
Jag förenklade som Ni kanske såg VB-koden eftersom vi inte behövde alla dessa konstanter. Men om man vill ha samma enkelhet som i C när det gäller API, varför inte ladda in en massa funktioner i en modul och sen använda modulen till sina program?Sv: Nackdelar med API??
> inte alla konstanterna)
Det är inte rättvist, för alla konstanterna finns ju i C och i verkligheten behöver du kanske andra konstanter nästa gång du anropar MessageBox.
> Okej, du har en poäng, men vilken kod är mer användarvänlig?
Nu skrev jag inte koden för att den skulle se användarvänlig ut. Jag skrev den bara snabbt, så som det föll sig mest naturligt för mig. Hade jag velat hade jag kunnat skriva den likadant som i Basic, men det tycker jag ser fult ut, så jag föredrar att skriva på traditionellt C-vis.
Men i och med att det är upp till användaren hur han/hon vill skriva koden så anser ju jag att det är mer användarvänligt.
> Jag tycker VB koden är mer lättförståelig
Ja, Basic gjordes för att det skulle vara lättförståeligt för människor medan C gjorde för att vara lättförståeligt för datorer. Och vad tror du är att föredra när man programmerar datorer? Jo, en människa kan lära sig, men inte en dator.
En konstig sak i Basic är t.ex. att tilldelningsoperatorn och jämförelseoperatorn utgörs av samma tecken. Det är ju lätt för människan att veta vad han/hon menar, men hur ska datorn skilja på det? Vad betyder exempelvis if (b = c = 2) then?
I C har man ju två olika symboler, = för tilldelning och == för jämförelse, så där blir det inga tvetydigheter: if (b = c == 2)
Likaså har man & och && i C där det första betyder and (bit-operator) och det andra är villkors-och, medan man i Basic (har jag för mig) skriver and för båda två? Det blir ju också problem.
> Massa symboler som |
Symbolerna är:
| = eller
& = och
! = inte
Det tar inte farligt lång tid att lära sig, och när man har lärt sig det är det ju betydligt enklare än att skriva "or", "and" och "not".
> och klammrar ({[<>]}) behövs inte lika ofta i VB
Ta bort {-tecknena från mitt exempel om du vill. De behövs inte där. Jag satte bara ut dem för att vara lite extra tydlig.
> Samtidigt behöver även C inkludera filer
Ja, det är ju finessen det. Man inkluderar ju bara det man behöver istället för att låta allt ligga med varenda gång "utifall att". Du kan ju testa min texteditor för Windows som jag har skrivit i C:
http://www.tydal.nu/tt.exe
Den är 12 kB allt som allt. Med alla dll-filer som behövs. Försök få det i VB.
> t.ex för att kunna skriva någonting på skärmen måste man (om jag
> minns rätt) inkludera conio
Conio är det om man använder Borland, stdio om man använder traditionell C, iostream om man använder C++ och slutligen windows om man vill göra windowsprogram.
> som jag tycker borde vara inkluderat redan.
Nej, varför skulle de vara det? Det är ju slöseri när det inte används. Det finns många program som aldrig behöver skriva något på skärmen.Sv: Nackdelar med API??
<code>
#include <stdio.h>
char
*T="IeJKLMaYQCE]jbZRskc[SldU^V\\X\\|/_<[<:90!\"$434-./2>]s",
K[3][1000],*F,x,A,*M[2],*J,r[4],*g,N,Y,*Q,W,*k,q,D;X(){r [r
[r[3]=M[1-(x&1)][*r=W,1],2]=*Q+2,1]=x+1+Y,*g++=((((x& 7)
-1)>>1)-1)?*r:r[x>>3],(++x<*r)&&X();}E(){A||X(x=0,g =J
),x=7&(*T>>A*3),J[(x[F]-W-x)^A*7]=Q[x&3]^A*(*M)[2 +(
x&1)],g=J+((x[k]-W)^A*7)-A,g[1]=(*M)[*g=M[T+=A ,1
][x&1],x&1],(A^=1)&&(E(),J+=W);}l(){E(--q&&l ()
);}B(){*J&&B((D=*J,Q[2]<D&&D<k[1]&&(*g++=1 ),
!(D-W&&D-9&&D-10&&D-13)&&(!*r&&(*g++=0) ,*
r=1)||64<D&&D<91&&(*r=0,*g++=D-63)||D >=
97&&D<123&&(*r=0,*g++=D-95)||!(D-k[ 3]
)&&(*r=0,*g++=12)||D>k[3]&&D<=k[ 1]
-1&&(*r=0,*g++=D-47),J++));}j( ){
putchar(A);}b(){(j(A=(*K)[D* W+
r[2]*Y+x]),++x<Y)&&b();}t ()
{(j((b(D=q[g],x=0),A=W) ),
++q<(*(r+1)<Y?*(r+1): Y)
)&&t();}R(){(A=(t( q=
0),'\n'),j(),++r [2
]<N)&&R();}O() {(
j((r[2]=0,R( ))
),r[1]-=q) &&
O(g-=-q) ;}
C(){( J=
gets (K
[1]))&&C((B(g=K[2]),*r=!(!*r&&(*g++=0)),(*r)[r]=g-K[2],g=K[2
],r[
1]&&
O())
);;}
main
(){C
((l(
(J=(
A=0)
[K],
A[M]
=(F=
(k=(
M[!A
]=(Q
=T+(
q=(Y
=(W=
32)-
(N=4
))))
+N)+
2)+7
)+7)
),Y=
N<<(
*r=!
-A))
);;}
</code>Sv: Nackdelar med API??
Sv: Nackdelar med API??
Jo, visst kräver det mer av programmeraren. Man måste kunna mer. Men det har man ju igen på att man har bättre kontroll över sitt program.Sv: Nackdelar med API??
>jämförelseoperatorn utgörs av samma tecken. Det är ju lätt för
>människan att veta vad han/hon menar, men hur ska datorn skilja på
>det? Vad betyder exempelvis if (b = c = 2) then?
>
>
>I C har man ju två olika symboler, = för tilldelning och == för
>jämförelse, så där blir det inga tvetydigheter: if (b = c == 2)
Ännu en orättvis jämförelse, jag tror inte att någon Basic-programmerare skulle misshandla If-satsen på det där sättet.
Som det ser ut så försöker du tilldela c ett värde medans du kollar om b = c, jag tror inte att Basic skulle acceptera det (fast jag har ingen möjlighet att kolla just nu).
Så här kanske du menar:
If b = c Then c = 2
Eller kanske:
If b = 2 And c = 2 Then ...
Orsaken till att Visual Basic inte har två olika likamed tecken beror på att den inte behöver ha det. C däremot har en annan syntax som gör det möjligt att det ska uppstå tvetydigheter.
Jag har aldrig (och det vågar jag säga med handen på hjärtat) haft några som helst tvetydigheter med likamedstecken i Basic. (ditt exempel anser jag vara absurdt och jag tror inte att Basic skulle tillåta syntaxen)
Däremot tyckte jag att C:s syntax var väldigt krånglig och svårläst.
Se bara på if (b = c == 2) var är Then? Man kollar och tilldelar i samma slag, jag offrar gärna lite snabbhet och ökar gärna storleken om det är lätt att se vad jag har gjort (det kan vara ett rent he...te att felsöka ett C-program).
Ta inte allt för illa vid er, det är nog mest för att jag är så van Basic att det är svårt för mig att acceptera och lära mig en annan syntax m.m.
Några saker som du har rätt i (enligt mitt tycke förstås):
API:er är lättare i C eftersom det är skrivet för C. (det skulle vara bra om konstanterna fanns med naturligt i VB också)
Programmen blir mindre och snabbare.
Man kan lättare både programmera i DOS och i Windows.Sv: Nackdelar med API??
Vilket jävla skitsnack ni eller ja iallafall en av er håller på med!!!!!
VB har sina fördelar jämfört med C/C++
C/C++ har sina..... ska man skriva enkla Windows Applikationer så låter det ganska onödigt att knacka massa C++ kåd... om det däremot krävs hastighet eller något annat jobbigt så e C++ MYCKET bättre!
så sluta tjaffsa massa skit nu!
//Martin