Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[C#] Dll zonder entrypoints gebruiken

Pagina: 1
Acties:
  • 252 views sinds 30-01-2008
  • Reageer

  • Armageddon_2k
  • Registratie: September 2002
  • Laatst online: 27-11 16:31

Armageddon_2k

Trotse eigenaar: Yamaha R6

Topicstarter
Goed ik zal eerst even uitleggen wat het probleem is:
Ik ben bezig met het schrijven van een script voor EPlan, dit is een tekenpakket waarin het mogelijk is scripting te gebruiken. Nu is het zo dat de scripting vrij beperkt is (puur 1 text document, dus geen reference lists enzo).

Nu is het probleem dat ik een Dll File heb waarin geen entry points kunnen worden gevonden, ik heb meerdere tools geprobeerd om de entry points te vinden. De dll bevat meerdere classes en functies maar hoe kan ik hier bij komen zonder entry points?

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Runtime.InteropServices;

public class Script
{   
     #region Dll Import
     
    [DllImport("MijnLieveSchattigeDll.dll",PreserveSig=false)]
    [return: MarshalAs(UnmanagedType.Interface)]
    static extern void WillekeurigeFunctie();
    
    #endregion
    
    [Start] 
    public void AutoTreat()
    {
        WillekeurigeFunctie();
    }
}

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Niet alle dll's voldoen ook daadwerkelijk aan de dll specificaties. Er zijn een aantal software huizen die hun eigen bibliotheek routines gebruiken om zo te voorkomen dat 'hun' dll door andere wordt gebruikt.

If it isn't broken, fix it until it is..


  • Armageddon_2k
  • Registratie: September 2002
  • Laatst online: 27-11 16:31

Armageddon_2k

Trotse eigenaar: Yamaha R6

Topicstarter
Als ik de dll gebruik in een visual studio project kan ik bij alle functies en classes, en alles werkt ook gewoon prima. Alleen als ik er vanuit scripting bij probeer te komen gaat het mis.

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Wat is de foutmelding die je in je script krijgt precies?

  • Armageddon_2k
  • Registratie: September 2002
  • Laatst online: 27-11 16:31

Armageddon_2k

Trotse eigenaar: Yamaha R6

Topicstarter
Entrypoint not found :+

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 06:38

Gerco

Professional Newbie

Heb je niet toevallig een managed DLL gemaakt en wil EPlan graag een native DLL zien? De ene DLL is de andere niet, er zijn minimaal vier soorten:

Simpele dll: Gemaakt in een unmanaged taal, exporteert functies e.d. via entrypoints.
ActiveX dll: Bevat ActiveX objecten en heeft 4 vast gedefinieerde entrypoints (DllRegisterServer e.d.) om zich te registreren en verwijderen.
Managed dll: Gemaakt met een .NET taal en exporteert geen standaard entrypoints, want deze bevat geen native code. Deze kun je alleen vanuit een .NET applicatie aanspreken.
Mixed dll: Bevat zowel managed als native code en kan ook entrypoints exporteren

Als je een Class Library project hebt gekozen in VS, dan heb je waarschijnlijk gewoon een managed dll gemaakt, dat is namelijk de default in .NET. Je zult dus een mixed dll moeten maken, deze bevat een gedeelte unmanaged code wat over het algemeen alleen dient om de managed functies aan te spreken.

[ Voor 8% gewijzigd door Gerco op 27-11-2007 10:15 ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • Armageddon_2k
  • Registratie: September 2002
  • Laatst online: 27-11 16:31

Armageddon_2k

Trotse eigenaar: Yamaha R6

Topicstarter
Kijk, daar wordt het een stuk duidelijker van.

Het gaat hier om een dll die door Eplan is aangeleverd maar bedoeld is, om vanuit een losse applicatie Eplan aan te sturen. Nu is het de bedoeling om dit vanuit de scripting zelf aan te sturen.(zodat alles binnen 1 applicatie blijft)
Het zal waarschijnlijk gaan om een Managed Dll, omdat er wel functionaliteit beschikbaar is vanuit .NET maar niet vanuit de Dll aanroep (entrypoint verhaal).

Ik zal dus waarschijnlijk een wrapper moeten maken in .NET om de Managed dll aan te roepen.
Ik neem aan dat dit wel te googlen is?

  • creator1988
  • Registratie: Januari 2007
  • Laatst online: 29-11 10:10
Armageddon_2k schreef op dinsdag 27 november 2007 @ 10:34:
Ik zal dus waarschijnlijk een wrapper moeten maken in .NET om de Managed dll aan te roepen.
Ik neem aan dat dit wel te googlen is?
Gewoon een command line programma maken die doet wat jij wilt, die kan je makkelijk aanroepen vanuit je script.

  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 31-10 11:58
Als het een managed dll is en je wilt 'm vanuit .NET gebruiken moet je hem toevoegen als Reference aan je project. Je gaat dan van managed naar managed. Je kunt dan gewoon de namespaces importen, classes instantieren en functies aanroepen. De DllImport is (vziw) alleen bedoeld om unmanaged/native dll's aan te roepen vanuit je managed code.

[ Voor 49% gewijzigd door riezebosch op 27-11-2007 11:23 ]

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


  • Korben
  • Registratie: Januari 2001
  • Laatst online: 14-11 13:15

Korben

() => {};

riezebosch schreef op dinsdag 27 november 2007 @ 11:21:
Als het een managed dll is en je wilt 'm vanuit .NET gebruiken moet je hem toevoegen als Reference aan je project. Je gaat dan van managed naar managed. Je kunt dan gewoon de namespaces importen, classes instantieren en functies aanroepen. De DllImport is (vziw) alleen bedoeld om unmanaged/native dll's aan te roepen vanuit je managed code.
Mocht je toch per se dynamisch die DLL willen aanspreken, dan kun je hem benaderen door middel van de System.Reflection classes. Let wel dat reflection een stuk langzamer is dan wanneer je een reference gebruikt.

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?


  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Als de Eplan een strong typed managed dll is, dan zou je hem in de GAC kunnen plaatsen. Je kunt hem dan ook vanuit vbscript (of classic asp) benaderen via (Server.)CreateObject("namespace.subnamespace.class")

If it isn't broken, fix it until it is..


  • unclero
  • Registratie: Juni 2001
  • Laatst online: 25-11 18:14

unclero

MB EQA ftw \o/

- weg -

[ Voor 96% gewijzigd door unclero op 27-11-2007 13:22 . Reden: Oeps.. de paar uur die ik erover deed om de reply te tikken zijn er mensen al met zinniger antwoorden gekomen ;) ]

Quelle chimère est-ce donc que l'homme? Quelle nouveauté, quel monstre, quel chaos, quel sujet de contradiction, quel prodige!

Pagina: 1