Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Använda gammal DLL i vb.net

Postades av 2006-12-27 15:35:14 - Fredric Egeskans, i forum vb.net, Tråden har 8 Kommentarer och lästs av 930 personer

Hej,

Jag har en applikation som använder en kommunikations dll. Denna dll är från 95 eller något sådant men jag behöver ändå använda den.

Poblemet är att den kod som finns för dll en är gjord för VB och innehåller en del saker som inte finns i .net. Det rör sig främst om Type (nu Structure i stället har jag förstått). Dessutom en hel del Dim Test as String*255 dvs storleksdefinierade variabler.

Jag har provat att helt sonika byta ut Typedef mot structure samt tagit bort alla storleks definitioner men det går absollut inte att få det att funka. Många kul grejor händer, dels felmeddelanden från Dll en om ogiltiga storlekar samtdessutom system crasher av olika magnitud...

Någon som har bra tips om hur man bäst löser detta, jag tror problemen kommer av storleksdefinierade variabler men det kan givetvis vara anra orsaker också. Jag kan få vissa saker att fungera mot dllen.

Här kommer några exempel på hur det kan se ut i VB:

<CODE VB> Public Type tagPCDEXTHDR '/* PCD modem strings: */ bHasModem As Integer '/* TRUE=modem configured */ ModemName As String * 36 '/* 35 bytes + NUL */ PCDReset As String * 129 '/* 128 bytes + NUL */ PCDInit As String * 129 '/* Gateway configuration: */ bHasGway As Integer '/* TRUE=Gateway configured */ GwayPort As Integer GwayBaud As Integer GwayCpu As Integer GwayMode As Integer GwayTout As Integer GwayTSDel As Integer GwayTNDel As Integer Spare As Integer '/* (was GwayTout1, now not used) */ GwayBreakLen As Integer End Type '/* PCD connection control structure */ Public Type tagPCDCONN Dummy As String * 685 End Type </CODE>

Och lite av deklarationerna...

<CODE VB> Public Declare Function PcdConnectionDialog1 Lib "c:\temp\SCOM32L1.DLL" (ByRef PCDCONN As tagPCDCONN) As Boolean </CODE>


PS. God fortsättnig till er alla...DS.


Svara

Sv: Använda gammal DLL i vb.net

Postades av 2006-12-27 16:05:41 - Daniel Sjöberg

Har du prövat att dimisionera dina string*xxx enlit följande

Dim variabelnamn as char()


Sedan när du skapar en variabel av structure-typen måste du köra en redim a.variabelnamn(36) eller hur stor den nu skall vara

Hoppas detta hjälper


Svara

Sv: Använda gammal DLL i vb.net

Postades av 2006-12-27 16:32:09 - Sebastian Andersson

Jag antar att den gamla DLL:n är skriven i C? Kan man i sådana fall få se definitionen av "tagPCDEXTHDR"? För övrigt, notera att BOOL's i C inte är detsamma som Booleans i VB (i alla fall inte VB6, är osäker på VB.NET). TRUE/FALSE i C är 1/0 och -1/0 i VB 6 (och kanske .NET). Med andra ord får du ändra funktiondeklarationen till...

Public Declare Function PcdConnectionDialog1 Lib "c:\temp\SCOM32L1.DLL" (ByRef PCDCONN As tagPCDCONN) As Integer ' BOOL är en typedef för int i C.


Svara

Sv:Använda gammal DLL i vb.net

Postades av 2006-12-27 19:09:41 - Oskar Johansson

Nja, bool spelar ingen roll, 0 är false, allt annat är true


Svara

Sv: Använda gammal DLL i vb.net

Postades av 2006-12-27 20:46:47 - Sebastian Andersson

I C, C++ osv, ja, men i VB.NET är det ej riktigt detsamma...

Testa följande kod och säg mig vad du får för resultat.

Dim temp As Boolean = True

MsgBox(CInt(temp))

temp = False

MsgBox(CInt(temp))


Själv fick jag -1 och sedan 0. Det är egentligen inget fel med att använda Boolean då VB.NET verkar konvertera TRUE (1) till -1 som är VB.NETs motsvarighet, men är man petig som jag så ändrar man deklarationen till Integer.;)


Svara

Sv:Använda gammal DLL i vb.net

Postades av 2006-12-27 23:24:39 - Oskar Johansson

Nja, att den internt använder -1 för true är så enkelt som att det binärt är 1111111111111111 (osv, beroende på längden på värdetypen), det är alltså väldigt enkelt att utföra binära operationer på dem då. När den kollar om något är true så kollar den bara om det är 0 eller inte, är det 0 så är det false, annars true.

Om api:t enligt dokumentationen retunerar ett boolskt värde så ska du rimligtvis också deklarera den externa funktionen så att den retunerar ett boolskt värde, att själv göra ett test som .net annars skulle göra åt dig blir bara ful och jobbig kod i slutändan.


Svara

Sv: Använda gammal DLL i vb.net

Postades av 2006-12-30 19:12:21 - Per-Olof Ohlsson

Jag förutsätter att Typen ovan är hur den definieras i VB6.

Då gäller bl.a. följande, alla Integer måste bytas till Short. I VB6 är integer = Int16 men i .net är det en Short som är 16 bit.

Fasta strängar deklarerar du med en tag framför som anger storleken.
<VBFixedString(255)>Public sMyString as String

Sedan finns ytterligare ett problem och det är hur strukturen är packad i C. VB6 har ju alltid 4 byte alignment så när typskifte i strukturen inte går jämt ut med 4 byte kan det bli problem om inte C-strukturen också är deklarerad med 4 byte alignment.

Men i VB.Net kan även detta styras (gick inte i VB6) med hjälp av tagdirektv, där Pack anger alignment:
<StructLayout(LayoutKind.Sequential, Pack:=1)> Public Class MyData....

Observera att detta bara går med klasser men det brukar gå lika bra att deklarera strukturen som en klass med bara data och använda den som en struktur.


Svara

Sv: Använda gammal DLL i vb.net

Postades av 2007-01-07 19:29:16 - Fredric Egeskans

Jag har varit borta från projektet några dagar, men nu skall jag definitivt prova tipsen jag fått, tack för hjälpen så här långt och jag återkommer med resultatet så småningom.

//Fredric


Svara

Nyligen

  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 725
27 958
271 751
379
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies