Godagens alla kanske någon kan hjälpa mig Hej Hmm jo men då skickar den ju bara in värdet, kruxet är ju att dllen skriver i referencen och sedan skall jag kunna använda det som skrevs i vb programet, det går ju inte om jag skickar ByVal för då skickas ju bara en kopia in ?? Hej Hej igen Jag har för mig att ByVal skickar en sträng som pekare och ByRef skickar den som värde, bara för att krångla till det för dem som vet hur det funkar. Testa att skicka ByVal MEN!!! du måste fylla den först, med så många tecken du behöver. Är det 255 tecken så kör först JÄTTE TACK, jag är evigt tacksam var ju bara att man var tvungen att fylla stringen först Hej NÄr det gäller API'er så är faktiskt det bakvänt ByRef skickar värdet och ByVal skickar en pekare ... Hej Hej igen Enligt Daniel Appleman så är det så, Daniel Appleman har inte fel när det kommer till API'er.. .Dll problems
Är så att jag använder en dll som är skriven i c++ från VB och det funkar kalas utom en sak nämligen String referencer. Problemet är att dll vill ha en string reference som den skall skriva i (funktionen är en void dvs den retunerar inget). Problemet ligger i att VBs string och c++ Char* inte hanteras på lika sätt. Någon som vet hur man kommer runt detta??
/Martin Sv: Dll problems
Du skall skicka din sträng ByVal.
Dvs testa att ändra i DLL deklarationen till ByVal ....... As String
Mvh
SvenSv: Dll problems
/HSv: Dll problems
Oki jag förstår .Skall kolla jag har haft mycket
problem med detta också.
Problemmet ligger i Null terminated string.
Skall läsa på , återkommer.
DSSv: Dll problems
Testa att först lägga till ett Null tecken till din stringvariabel
minstring & Chr$(0) och därefter skicka den till din DLL
spånar
SvenSv: Dll problems
dim x as string
x=Space(255)
funktion(ByVal x)
Skall funka
/mSv: Dll problems
/H
(men ByRef är ju reference och ByVal är värdet =)Sv: Dll problems
>Jag har för mig att ByVal skickar en sträng som pekare och ByRef >skickar den som värde
Tvärtom men principen är riktig
DSSv: Dll problems
Fråga mig inte varför, men så är det ... Sv: Dll problems
>NÄr det gäller API'er så är faktiskt det bakvänt ByRef skickarvärdet
>och ByVal skickar en pekare ...
Är det verligen så ??. Logga in någon expert ,därmed inte sagt
att Patrik har fel.
API är väl normalt gjorda i C standard ??
fundersam
SvenSv: Dll problems
Citerar vad jag hittat i ämnet, Faen vet om jag blev klokare.
Visual Basic uses a String datatyp known as BSTR.
A BSTR acts like a pointer,a variabel that contains
the memory location of the string it self.
All Windows API recognize LPSTR strings,which are a pointer
to standard null-terminated C strings (ASCIIZ string).
By default a Visul Basic string argument,or BSTR,is passed
by reference.This means that a pointer to the BSTR is passed.
Because the BSTR itself is a pointer,the argument that is passed
is actually a pointer to a pointer.
By default, a string argument is passed by reference ;
in other words,you are actually passing a
pointer to a pointer to the data.
If you send an argument,API LPSTR(a pointer to a null-terminated string)
pass the BSTR ByVal.Because a BSTR is a pointer to the first data byte
of a null-terminated string,it looks like an LPSTR to the API DLL procedure.
rätt citerat intygas
mvh
SvenSv: Dll problems
Det står dessutom i din text sven att det är så ...