Results 1 to 14 of 14

Thread: Delphi DLL voor VS

  1. #1

    Cool Delphi DLL voor VS

    Ik heb me suf gezocht op internet naar een voorbeeld van een eenvoudig project.
    Ik wil een library, die in Delphi is geschreven beschikbaar maken onder Visual studio(2005). Hiervoor wil ik een DLL schijven (.net), die in VS aan te spreken is.
    Ik ben zo ver, dat hij de routine in de dll aanroept, maar daar crasht hij. Dit zal wel door het ontbreken van een initialiserings-route oid zijn......
    Andere manieren om een Delphi (2007) library onder VS beschikbaar te maken zijn ook welkom!

    Taco

  2. #2
    Welkom op NLDelphi.

    Ik denk dat hij crasht omdat je routine niet goed is geïmporteerd in VS. Mogelijk heb je de calling convention niet juist. Kun je laten zien hoe je nu je routine aanroept in VS?

    Is de dll nu een Win32 dll, of probeer je een .Net assembly te maken? Als alternatief kun je ook nog een COM dll maken, maar dat vereist ook wel wat werk.
    1+1=b

  3. #3
    Wil je een plugin maken voor de VisualStudio IDE? Of wil je een library maken die aan te spreken is door software die gemaakt wordt met hulp van VisualStudio (C#, C++, VB.Net)? En met welke Delphi versie wil je dit doen?
    We adore chaos because we like to restore order - M.C. Escher

  4. #4
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    En welke delen zijn nu precies .NET? De originele bibliotheek, de wrapper en de VS applicatie? Of maar sommige?

  5. #5
    Ik gebruik Codegear 2005.
    Daar heb ik onder "Delphi for .NET Projects" een library (DLL) aangemaakt.
    Hierin heb ik voor test een simpele function toegevoegd (ga ik later vervangen voor een aanroep naar een echte functionele routine):

    Delphi Code:
    1. function TestFunction(SomeText : String): String;
    2. begin
    3.   result := '#'+SomeText + '#';
    4. end;
    5.  
    6. {$UNSAFECODE ON}
    7.  
    8. exports
    9.   TestFunction;
    Hieruit de DLL gemaakt en in VS (2008) in een testproject gehangen (ASP.Net C#).

    C# Code:
    1. public class library2
    2. {
    3.     [DllImport("library2.Dll")]
    4.     public static extern string TestFunction(String s);
    5. }
    6.  
    7. public partial class Default2 : System.Web.UI.Page
    8. {
    9.     protected void Page_Load(object sender, EventArgs e)
    10.     {
    11.  
    12.     }
    13.     protected void Button1_Click(object sender, EventArgs e)
    14.     {
    15.         Label3.Text = TextBox1.Text + library2.TestFunction(TextBox2.Text);
    16.     }
    17. }
    That's all wat ik heb gecodeerd.
    Bij het runnen geeft hij in VS een runtime error, die hij samenvoegt op ASP:
    Poging tot het lezen of schrijven van beveiligd geheugen. Dit duidt er vaak op dat ander geheugen is beschadigd.
    Dat van geheugen beschadigd zullen we maar negeren....

    Dit leek me de meest voordehand liggende mogelijkheid om functies, geschreven in Delphi te gebruiken op een ASP-pagina, die ook ADO (access mdb) gebruikt (Codegear ondersteunt alleen ADO onder VCL, niet onder ASP).
    Last edited by GolezTrol; 15-May-09 at 09:49.

  6. #6

  7. #7
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Is je VS2005 project ook .NET 2? Denk eraan dat D2005 .NET 1.1 is.

  8. #8

    Cool

    Ik gebruik VS 2008, dus .NET 3.5.
    Maakt dat veel uit trouwens? Het kan zijn, dat de provider waar de applicatie uiteindelijk op moet gaan draaien nog .net 2.0 host.....

  9. #9
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    2.0+ is compatible met elkaar. 1.1 en 2.0 voor zover ik weet niet.

    Maar het is meer een tip daar eens in te duiken dan een absoluut zekere incompabiliteit
    Last edited by marcov; 15-May-09 at 11:05.

  10. #10
    Klopt deels. .Net 1.1 en 2.0 zijn inderdaad niet compatible. .Net 2.0 applicaties draaien wel onder 3.5, maar niet andersoms, in ieder geval niet als je gebruikmaakt van specifieke nieuwe features die in 3 geïntroduceerd zijn.
    1+1=b

  11. #11
    SillyMember
    Join Date
    May 2003
    Location
    Gent
    Posts
    7,725
    Quote Originally Posted by Taco Wannee View Post
    Daar heb ik onder "Delphi for .NET Projects" een library (DLL) aangemaakt.
    en
    Code:
    [DllImport("library2.Dll")]
    spreken elkaar tegen.
    Dus
    a) ofwel maak je een native (win32) dll met D2005 en gebruik je het DllImportAttribute attribute.
    b) ofwel maak je een .NET assembly en voeg je die gewoon toe bij de references in je C# assembly.

    Voor b): een 1.1 .NET assembly kan je doorgaans zonder enig probleem gewoon gebruiken in 2.0 en hoger. Je kan in VS ook het target framework kiezen (bijvoorbeeld 1.1) en dan heb je dezelfde versies.

    Ik meen me vaag ook iets te herinneren over Delphi for .NET en een verschil tussen .NET library en .NET package(kan ook enkel voor D8 geweest zijn).
    Had iets te maken met een bepaalde units die werden meegelinkt en of nodige VCL assemblies die je ook moest meeleveren of zo.

    Noteer ook dat de redenen die je opgeeft om een Delphi assembly te gebruiken niet echt gegrond zijn.
    ADO.NET doet gewoon MS Access, je hoeft dus helemaal geen VCL te gebruiken en geen ADO (dbGo of hoe het bij CodeGear ook moge heten, tegenwoordig).
    All methodologies are based on fear. -- Kent Beck.

  12. #12
    SillyMember
    Join Date
    May 2003
    Location
    Gent
    Posts
    7,725
    Quote Originally Posted by Dirk Andries View Post
    en
    Ik meen me vaag ook iets te herinneren over Delphi for .NET en een verschil tussen .NET library en .NET package(kan ook enkel voor D8 geweest zijn).
    Had iets te maken met een bepaalde units die werden meegelinkt en of nodige VCL assemblies die je ook moest meeleveren of zo.
    Dr. Bob heeft daar een artikel over (D8), maar ik weet nog steeds niet of ze dat naderhand opgelost hebben bij CodeGear in latere versies.

    Ook: ik zou (zeker voor ASP.NET) minimaal .NET 2.0 willen aanraden (dat betekent dan ook: minimaal D2007 for .NET).
    All methodologies are based on fear. -- Kent Beck.

  13. #13

    Talking Assemblies

    De insteek van het gebruik van assemblies lijkt me hier wel passen.
    Vandaar dat ik in het boek van Delphi 2005 (mastering) gedoken ben.
    Hierin vind ik wel een aantal flarden over assemblies, maar ik kan daar geen helder plaatje van maken, hoe dat aan te pakken. Dit komt mede omdat ik nog amper kennis heb van DLL's.
    Weet er iemand een helder voorbeeld hoe zo'n assembly in elkaar te zetten?

  14. #14
    SillyMember
    Join Date
    May 2003
    Location
    Gent
    Posts
    7,725
    Een assembly is gewoon een .exe of .dll voor .NET

    In Delphi:
    Delphi for .NET Projects -> Library
    Delphi for .NET Projects -> Package

    In VS:
    New Project of Add Project -> één van de ziljoen mogelijkheden
    All methodologies are based on fear. -- Kent Beck.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •