Avatar billede thlund Nybegynder
10. juni 2010 - 11:20 Der er 3 kommentarer og
1 løsning

DLL kald med "Type"

Skal kalde en DLL der åbenbart er skrevet i Delphi.

I dokumentationen står der at ved kald med Visual Basic skal der defineres en Type med en masse data (double, single) i. Nu kan jeg jo ikke definere en type i VB.net på den måde så hvad gør jeg?

Jeg har prøvet at definere en class, men den crasher big time. (System.ExecutionEngineException kan ikke engang reddes med en try/catch).

Interessant nok, så crasher kaldet ikke når jeg giver den dårlig input, altså at den afviser at beregne fordi input er tosset. Det virker som om at det først er når den skal til at skrive i denne type struktur at det går galt. Det er jo nok fordi den hukommelse den tror den kan skrive i ikke svarer overens med den jeg har stillet til rådighed...


Dokumentationen ser således ud til "Visual Basic" uden nogen angivelse hvilken version.

Type TDesignData
  O_OP1 As Long
  O_OP2 As Long
  O_Q1 As Double
  O_Q2 As Double
  O_QU1 A osv osv
End Type

Declare Function CopyDesign Lib "OS43.DLL" _
(ByVal I_RPath As String, ByVal I_Flags As Long, ByVal I_Typ As String, _
ByVal I_CC As Long, ByVal I_Ref As String, ByVal I_Q As Double, _
ByVal I_T0 As Double, ByVal I_TC As Double, ByVal I_TS As Double, _
ByVal I_TL As Double, ByVal I_TM As Long, ByVal I_TLC As Double, _
ByVal I_TOC As Long, ByVal I_TOL As Double, ByVal I_TN As Double, _
ByVal I_OP As Long, ByVal I_SP As Single, ByVal I_CR As Single, _
ByVal O_T1 As String, ByRef O_SzT1 As Long, ByVal O_T2 As String, _
ByRef O_SzT2 As Long, ByRef DesignData As TDesignData, _
ByRef O_Hint1 As Long, ByRef O_Hint2 As Long, ByVal O_Err As String, _
ByRef O_SzErr As Long) As Long

Jeg har gennemskuet Long bliver til Integer i VB.NET.
Jeg har fået O_Err og O_SzErr til at virke i andre DLL kald i samme DLL. Det er kun disse dll med "Type" kald der crasher.

På forhånd tak
Avatar billede arne_v Ekspert
10. juni 2010 - 19:29 #1
Du skal have lavet en struct med serialiserings attributter.
Avatar billede arne_v Ekspert
10. juni 2010 - 19:30 #2
Eksempel:

<StructLayout(LayoutKind.Sequential)> _
Public Structure MEMORYSTATUS
    Public dwLength As Integer
    Public dwMemoryLoad As Integer
    Public dwTotalPhys As Integer
    Public dwAvailPhys As Integer
    Public dwTotalPageFile As Integer
    Public dwAvailPageFile As Integer
    Public dwTotalVirtual As Integer
    Public dwAvailVirtual As Integer
End Structure
Avatar billede thlund Nybegynder
10. juni 2010 - 20:28 #3
Tak Arne

Virker fint

Dropper du lige et svar ?
Avatar billede arne_v Ekspert
10. juni 2010 - 20:31 #4
kommer her
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