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


Importera C++ dll till C#

Postades av 2007-07-10 13:13:28 - Robert Kajic, i forum c# (c-sharp), Tråden har 4 Kommentarer och lästs av 1881 personer

Hej,
Jag hoppas att jag valde rätt forum för mig fråga, i annat fall ber jag om ursäkt.
Jag behöver importera en dll som är skriven i C++ för att använda dess funktioner i C#. För att importera en funktion som heter AdkClose från denna dll har jag gjort såhär:

[DllImport("Adk.dll")]
public static extern void AdkClose();

Detta verkar fungera bra så till vida att jag kan anropa funktionen utan att några exceptions slängs. Jag antar alltså att det gick bra att importera AdkClose. När jag sedan ska importera funktionen AdkOpen som är lite mer komplicerad (den returnerar en struct) och tar två strängar som input gör jag på följande sätt:

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 2)]
public struct ADK_ERROR {
[MarshalAs(UnmanagedType.I8)]
public long lRc;
[MarshalAs(UnmanagedType.I8)]
public long lDbTable;
[MarshalAs(UnmanagedType.I8)]
public long lField;
[MarshalAs(UnmanagedType.I8)]
public long lFunction;
[MarshalAs(UnmanagedType.I8)]
public long lProgramPart;
}
[DllImport("Adk.dll")]
public static extern ADK_ERROR AdkOpen(String systemPath, String companyPath);

Först deklarerar jag alltså structen som AdkOpen kommer returnera och sedan importerar jag funktionen AdkOpen. När jag sedan anropar AdkOpen får jag dock ett System.EntryPointNotFoundException. Jag antar att detta är tänkt att betyda att AdkOpen inte finns i dllen?

Jag har ett exempel på hur man ska imporera de två funktionerna i Visual Basic och då ser det ut såhär:

Public Type ADKERROR

lRc As Long
lDbTable As Long
lField As Long
lFunction As Long
lProgramPart As Long

End Type

Public Declare Function AdkOpen Lib "adk.dll" _
Alias "_AdkOpen@8" (ByVal pszSystemPath As String, _
ByVal pszFtgPath As String) As ADKERROR

Public Declare Function AdkClose Lib "adk.dll" _
Alias "_AdkClose@0" () As Long

Jag har inte någon vidare koll på VB syntax och har därför svårt att översätta ovanstående till C#. Tex. vet jag inte vad @8 innebär i Alias "_AdkOpen@8" och heller inte varför AdkOpen föregås av ett understreck. Jag vet att de båda funktionerna (AdkOpen och AdkClose) finns deklarerade utan några understreck i dllen och ett slags bevis på det är att jag i C# kan köra raden public static extern void AdkClose(); men om jag kör public static extern void _AdkClose(); får jag ett System.EntryPointNotFoundException.
Om någon kan hjälpa mig med att lista ut varför jag misslyckas med att importera AdkOpen skulle jag bli väldigt glad. Tack på förhand för hjälpen.
/Robert Kajic


Svara

Sv: Importera C++ dll till C#

Postades av 2007-07-10 13:33:38 - Simon Dahlbacka

long i vb betyder att du ska ha int i C# och antagligen UnmanagedType.I4


Svara

Sv:Importera C++ dll till C#

Postades av 2007-07-10 13:42:04 - Robert Kajic

Hej Simon,
Tack för ditt svar. Jag ändrade i deklarationen för min struct till följande:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 2)]
public struct ADK_ERROR {
[MarshalAs(UnmanagedType.I4)]
public int lRc;
[MarshalAs(UnmanagedType.I4)]
public int lDbTable;
[MarshalAs(UnmanagedType.I4)]
public int lField;
[MarshalAs(UnmanagedType.I4)]
public int lFunction;
[MarshalAs(UnmanagedType.I4)]
public int lProgramPart;
}
Tyvärr gjorde det här varken från eller till för mitt nuvarande problem. Jag får fortfarande samma System.EntryPointNotFoundException. Jag antar dock att jag hade fått problem med min dåligt deklarerade struct senare (om jag nu lyckas importera AdkOpen) och förhoppningsvis slipper jag det nu när jag ändrat i structen.
/Robert Kajic


Svara

Sv: Importera C++ dll till C#

Postades av 2007-07-10 14:26:56 - Simon Dahlbacka

sen kan man ju googla också.. kolla ifall du hittar nåt vettigt här: http://www.webforum.nu/printthread.php?t=149943&page=2&pp=25


Svara

Sv:Importera C++ dll till C#

Postades av 2007-07-10 17:35:24 - Robert Kajic

Hej Simon,
Tack så jättemycket för hjälpen. Borde som du själv säger ha googlat men av någon anledning kände jag att mitt problem var såpass specifikt att jag inte visste vad jag skulle söka efter. Nu har jag iaf. kommit vidare och tom. lyckats ansluta till SPCS.
/Robert Kajic


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 718
27 958
271 751
3 298
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