Avatar billede thlund Nybegynder
14. januar 2010 - 10:29 Der er 6 kommentarer og
1 løsning

Kan ikke få adgang til DLL

Har fået nogle DLL'er fra en leverandør som jeg skal bruge til at beregne deres produkter.

Jeg prøver så at oprette en reference til deres DLL, men Visual Studio melder at der ikke kan oprettes en reference til denne. Er det en valid assembly eller COM component.

Min umiddelbare tanke var at det var leverandøren der har leveret noget skidt, men nu er det anden gang og mistanken melder sig om det er mig der gør noget forkert.

Ifølge leverandørens dokumentation er DLL'erne skrevet i Borland Delphi Pascal 7 hvis det gør nogen forskel.

Hvorfor ikke spørge leverandøren? Vil hellere være til grin her end overfor leverandøren :P)

Kan jeg trække på DLL funtioner ad en anden vej?
Avatar billede thlund Nybegynder
14. januar 2010 - 11:05 #1
Tillæg

Jeg har fundet at jeg kan "declare auto function BlahBlah lib "LibLib" Alias MinBlahBlah(byval

og så starter problemerne.

Jeg har dokumentation som siger pChar, LongInt, Double, Single...

Hvordan fodrer og henter jeg data rigtigt fra denne ? Hvordan definerer jeg ovenstående typer i VB så jeg kan kommunikere korrekt med denne dll.
Avatar billede bvli Praktikant
14. januar 2010 - 12:45 #2
Du bliver nødt til at bruge pinvokes på den .dll, hvis ikke den er compilet til .net eller som et com-komponent.
Avatar billede thlund Nybegynder
15. januar 2010 - 09:46 #3
pinvoke siger at jeg ikke kan returnere varianter.

I dokumentationen for denne funktion siges det at argumenterne er

Input
A  LongInt
B  pChar
C  LongInt
D  Double

Output
E  Double
F  LongInt
G  Single
H  pChar

Funktions resultat LongInt

Jeg har så declared funktionen således

Declare Function MyFunc Lib "dllnavn.dll" Alias "Func" (ByVal A as Integer, Byval B as IntPtr, Byval C as Integer, Byval D as Double, ByRef E as Double, ByRef F as Integer, ByRef C as Single, ByRef H as IntPtr) as Integer

Nogen kommentarer ? Det må jo så være noget med typerne...
Avatar billede bvli Praktikant
15. januar 2010 - 09:58 #4
Hvordan ser prototypen/deklarationen ud for den funktion du skal interop'e mod?
Avatar billede thlund Nybegynder
15. januar 2010 - 10:20 #5
Nu havde jeg simplificeret det lidt overfor, men her er originalen

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';
Avatar billede thlund Nybegynder
19. januar 2010 - 10:41 #6
Nyheder - har fået en ny version fra leverandør

Declaration with Microsoft Visual Basic®:

Declare Function CopyThresholds Lib "HHK44.DLL" _
(ByVal I_Flags As Long, ByVal I_Typ As String, ByVal I_CC As Long, _
ByVal I_Ref As String, ByVal I_T0 As Double, ByVal I_FI As Long, _
ByVal I_OP As Long, ByVal I_CR As Single, ByVal I_Range As Long, _
ByRef O_OP As Long, ByRef O_TCmin As Double, ByRef O_TCmax As Double, _
ByVal O_Err As String, ByRef O_SzErr As Long) As Long

Buffer variable in calling program:

Dim O_Err As String * 20

Umiddelbart burde dette være lige ud af landevejen, men jeg har (stadig) problemer. Dette er tydeligvis en ældre VB (6?) da .net ikke tillader streng definitionen. Jeg har således ændret den til

    <VBFixedString(20)> Public O_Err As String

Men når jeg kalder får jeg at vide at der bliver skrevet i beskyttet hukommelse. Jeg har på fornemmelsen at det er den streng. Kunne ikke finde ud af at sætte fixed length i funktions deklarationen.

Er der i øvrigt nogen forskel på Long/Double/Single fra tidliger VB til .net ?
Avatar billede thlund Nybegynder
20. januar 2010 - 11:03 #7
Lukker denne og starter en ny - emnet har skiftet og jeg tror ikke folk ser det - ingen svar i hvert fald på noget der burde være nogen der ved
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