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


Hitta entry point i en DLL?

Postades av 2005-03-07 19:06:57 - Magnus Stolpe, i forum vb.net, Tråden har 5 Kommentarer och lästs av 595 personer

Hej,

Jag försöker anropa en funktion i en dll som heter X_OpenPort i X_com.dll men får detta fel vid körning:

"Unable to find an entry point named X_OpenPort in DLL X_COM.DLL"

Jag har prövat med bägge av dessa varianter men får samma resultat:

Declare Function X_OpenPort Lib "X_com.dll" (ByVal strPortName As String, ByVal wTimeOut As Integer, ByVal bRTS As Boolean, ByVal bDTR As Boolean) As Boolean

Och även denna variant kopierad från MSDN:

<DllImport("X_COM.DLL", EntryPoint:="X_OpenPort", SetLastError:=True, _
CharSet:=CharSet.Unicode, ExactSpelling:=True, _
CallingConvention:=CallingConvention.StdCall)> _
Public Shared Function _
X_OpenPort(ByVal strPortName As String, ByVal wTimeOut As Integer, ByVal bRTS As Boolean, ByVal bDTR As Boolean) As Boolean
' Leave function empty
End Function

Hur hittar jag rätt entry point? Enligt den sparsamma dokumentation ska funktionen hetta precis det som jag har skrivit in...

Finns det något jag missat eller något kul verktyg som kan ta reda på alla entry points i en dll?
Det finns en header-fil till denna dll och där står det så här:

#define CMD_TIMEOUT (10)
...
X_COM_API bool X_OpenPort(LPCSTR strPortName, WORD wTimeOut = CMD_TIMEOUT, bool bRTS = false, bool bDTR = false);
...


Mvh/
Magnus


Svara

Sv: Hitta entry point i en DLL?

Postades av 2005-03-07 20:03:13 - Johan Svensson

Är det en ActiveX dll? Isåfall är den registrerad?

Har du testat att ange fullständig sökväg i deklaraionen och inte bara filnamnet?


Svara

Sv: Hitta entry point i en DLL?

Postades av 2005-03-07 20:34:27 - Håkan Borneland

Hej!

.NET är inte min vanliga miljö, men jag provar.
Har du skapat en referens till dll:en i projektet?

//Håkan


Svara

Sv: Hitta entry point i en DLL?

Postades av 2005-03-07 20:43:18 - Magnus Stolpe

Hej!

Jag hittade svaret själv och här är det:

(Först, nej, det är inte en ActiveX, detta är en äkta unmanaged DLL skapad ur C++ och kan inte registreras eller skapas referenser till i VB.NET).

Jag använde Dependency Walker (freeware, sök på Google) som kan läsa ur massor av kul info ur en DLL. Det fungerar även med kommandot (i .NET kommandoprompten):

dumpbin -exports FOO.DLL
eller
link -dump -exports FOO.DLL
Lägg till växeln
/out:textfil.txt
om du vill det i en textfil (det vill man).

Då upptäckte jag att funktionerna som jag trodde skulle se ut så här (fiktivt exempel):

BOOL My_Foo(WORD fooInt);


såg i själva verket ut så här:

??My_Foo@QQE@EFE@Z


lite skumt alltså.

I detta läge kan man både använda
Declare Function <funktion> ...
eller
<DllImport( ... EntryPoint:="...")>
. Denna använde jag (kopierad från MSDN) och den fungerar fint:

<DllImport("FOO.DLL", EntryPoint:="??My_Foo@QQE@EFE@Z", SetLastError:=True, _
    CharSet:=CharSet.Unicode, ExactSpelling:=True, _
    CallingConvention:=CallingConvention.StdCall)> _
    Public Shared Function _
    My_Foo(ByVal fooInt As Integer) As Boolean
        ' VB tvingar anropen att gå till DLL:en så ingen logik ska skrivas här!
        ' Skriv en beskrivning här, kanske...
    End Function


Vill man använda det älder sättet (som är enda alternativet i VB6) så måste man använda Alias, kan vara smart med Auto också:
Declare Auto Function My_Foo Lib "FOO.DLL" Alias "??My_Foo@QQE@EFE@Z" (ByVal fooInt As Integer) As Boolean


Tänk på att om funktionen returnerar void så måste man byta Function till Sub.

Som man ser så skrivs det skumma funktions-anropet inom citattecken och då fungerar det.

Det ska även gå med "ordinal values", har inte testat det men då ska man sätta ett # framför ordningsnumret i EntryPoint för att ange funktionen.

Lycka till...

Mvh/
Magnus


Svara

Sv:Hitta entry point i en DLL?

Postades av 2005-03-08 11:24:02 - Johan Svensson

Sorry,

Jag missade att det var ett .Net forum som tråden låg i, jag antog at det var klassisk VB som frågan gällde.. Jag kollar bättre nästa gång..

// Johan


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 722
27 958
271 751
1 220
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