Avatar billede thlund Nybegynder
18. januar 2010 - 09:17 Der er 8 kommentarer og
1 løsning

Typer i VB ved kald af Delphi dll

Hej

Håber at der er nogen her der også har viden om VB.net.

Jeg skal kalde en dll udviklet i Delphi, men har lidt problemer som jeg tror stammer fra type deklarationen i VB.

Prototypen for funktionen i delphi er som følger.


Function Thresholds(I_Flags: LongInt; I_Typ: pChar; I_CC: LongInt;
I_Ref: pChar; I_T0: Double; I_FI, I_OP: LongInt; I_CR: Single; I_Range: LongInt;
Var O_OP: LongInt; Var O_TCmin, O_TCmax: Double;
Var O_Err: pChar): LongInt; StdCall; External 'HHK44.DLL';

i VB må det være

Declare Auto Function locThresholds Lib "hhk44.dll" Alias "Thresholds" (...

og hvad så? Mine tanker var
LongInt = Integer
pChar = ?
Double = Double
Single = Single

ikke var -> ByVal
var -> ByRef

men det virker ikke, sååå...
Avatar billede a_nor Nybegynder
18. januar 2010 - 09:59 #1
Avatar billede thlund Nybegynder
18. januar 2010 - 12:03 #2
Tak, men jeg kendte godt indholdet. Det er ikke declare funktionaliteten der (ser ud til) at genere mig.

Jeg tror at det er de enkelte typer - om jeg skal bruge Integer, Long eller hvad i VB. Specielt tror jeg at en pointer til characters kunne give problemer.

Jeg har siden jeg postede declareret således:

    Declare Ansi Function B_Tresholds Lib "Hhk44.dll" Alias "Thresholds" _
            (ByVal I_Flags As Integer, ByVal i_type As String, ByVal I_CC As Integer, ByVal I_Ref As String, _
            ByVal I_TO As Double, ByVal I_FI As Integer, ByVal I_OP As Integer, ByVal I_CR As Single, ByVal I_Range As Integer, _
            ByRef O_OP As Integer, ByRef O_TCmin As Double, ByRef O_TCmax As Double, ByRef O_Err As String) As Integer

Og denne form crasher i det mindste ikke ved kaldet, men jeg får en fejlkode der grundlæggende betyder "Aner ikke hvad der skete...", så måske er der stadig problemer med typer som så ikke bliver "oversat" korrekt.
Avatar billede thlund Nybegynder
18. januar 2010 - 12:11 #3
Tak, men jeg kendte godt declare syntaksen. Jeg tror at mit problem ligger i type definition og deraf følgende omsætning i kaldet.

Jeg har siden deklareret således

    Declare Ansi Function B_Tresholds Lib "C:\Program Files\Wbitzer\Hhk44.dll" Alias "Thresholds" _
            (ByVal I_Flags As Integer, ByVal i_type As String, ByVal I_CC As Integer, ByVal I_Ref As String, _
            ByVal I_TO As Double, ByVal I_FI As Integer, ByVal I_OP As Integer, ByVal I_CR As Single, ByVal I_Range As Integer, _
            ByRef O_OP As Integer, ByRef O_TCmin As Double, ByRef O_TCmax As Double, ByRef O_Err As String) As Integer

Hvor skiftet til Ansi gjorde at den i det mindste ikke crashede i kaldet (noget med string typen). Men jeg får en fejlkode som antyder at den ikke aner hvad der gik galt.

Jeg er mest ude efter om type definitionerne er korrekte (eller om der er andet der stikke i øjnene)
Avatar billede thlund Nybegynder
18. januar 2010 - 12:12 #4
Hmmm syret - første indlæg forsvandt - først
Avatar billede a_nor Nybegynder
18. januar 2010 - 14:28 #5
Hej igen

Erindrer noget fra et word-projekt:  Den "string" der skal overføres, skal kunne være i memory-en (være "lang-nok")

ie.  hvis du vil returnere ex. 20 tegn fra din eksterne funktion, så skal de kunne være i basic-variablen. Inden kaldet kan denne så være fyldt den med 20 spaces.

Du kan evt. indledningsvis lave en funktion der kun overfører én variabel. Iøvrigt kan du godt 'debugge' dll-en on the fly.

mvh
Avatar billede a_nor Nybegynder
18. januar 2010 - 14:34 #6
Der er således o_err der skal kunne indeholde den returnerede værdi
Avatar billede a_nor Nybegynder
18. januar 2010 - 15:50 #7
Iøvrigt skal du vist ikke have 'var' i din delphidefinition, da der med pchar arbejdes direkte på den variabel der overføres.
Avatar billede thlund Nybegynder
19. januar 2010 - 10:11 #8
Er gået i en anden retning - ellers tak for hjælpen a_nor. drop lige et svar så jeg kan acceptere.
Avatar billede a_nor Nybegynder
19. januar 2010 - 10:18 #9
Tak, men ærgeligt du ikke fik det til at virke :-(  Jeg arbejdede med det i D 7.
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
Kurser inden for grundlæggende programmering

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