Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [c#] Come scrivere una funzione in una DLL

    Vorrei scrivere una funzione che adesso fà parte del main in una DLL separata.

    Questa funzione usa una classe che fà già parte della libreria.

    Non riesco a farlo, forse sbaglio qualcosa ...

    Questa è la classe che fà già parte della libreria e che riesco ad utilizzare:
    public class DPoint : Object
    {
    private double x;
    private double y;

    public void SetX(double i)
    .... // ecc ecc
    }

    e questa è la funzione (parte) che vorrei far parte della DLL:
    private DPoint SCoordinates(double x, double y)
    {
    DPoint dptScreen = new DPoint(-2, -2);
    try
    ..... // ecc ecc
    }

    Sicuramente sbaglio nella sua definizione, se potete darmi una imbeccata ...

    Poi nella classe DPoint ho trovato scritta quella sintassi, e cioè con :Object, che se ometto funziona lo stasso.

    A cosa serve????

    Grazie per l'aiuto

  2. #2

    Re: [c#] Come scrivere una funzione in una DLL

    Originariamente inviato da andrearaffa
    Non riesco a farlo, forse sbaglio qualcosa ...
    Cosa intendi per "non riesco a farlo"? Il compilatore dà errore? Hai problemi di altro genere?
    private DPoint SCoordinates(double x, double y)
    {
    DPoint dptScreen = new DPoint(-2, -2);
    try
    ..... // ecc ecc
    }
    Se deve essere visibile all'esterno dovrà essere pubblica.
    Poi nella classe DPoint ho trovato scritta quella sintassi, e cioè con :Object, che se ometto funziona lo stasso.

    A cosa serve????
    Non credo che serva a niente.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Cosa intendi per "non riesco a farlo"? Il compilatore dà errore?
    Si, già nella prima riga:

    public DPoint SCoordinates(double x, double y)
    {
    DPoint dptScreen = new DPoint(-2, -2);
    try
    ..... // ecc ecc
    }

    evidenzia DPoint (quello dopo il public) e scrive "è prevista una classe, un delegato, un enum, un interfaccia o un struct".
    Invece la stessa cosa nel main non dà errore.

    La classe DPoint l'ho messa subito sopra a questa funzione.

  4. #4
    Posta tutto il file .cs.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Ecco qui; ricordo che questa deve essere una DLL:

    codice:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace Librerie
    {
        public class Dummy
        {
        }
    
    
        public class DoublePoint
        {
            private double x;
            private double y;
    
            public void SetX(double i)
            {
                x = i;
            }
            public double GetX()
            {
                return x;
            }
    
            public void SetY(double i)
            {
                y = i;
            }
            public double GetY()
            {
                return y;
            }
    
            public DoublePoint()
            {
                x = -1;
                y = -1;
            }
    
            public DoublePoint(double dx, double dy)
            {
                x = dx;
                y = dy;
            }
        } // Fine classe DoublePoint
    
    
    /*public DoublePoint CalcolaCoordinate(double x, double y) 
    { 
      DoublePoint dptScreen = new DoublePoint(-2, -2); 
      try 
      { 
        double screenX = x - pnlGE.Location.X; 
        double screenY = y - pnlGE.Location.Y; 
        double midX = pnlGE.Width / 2; 
        double midY = pnlGE.Height / 2; 
        double outX = 0.0; 
        double outY = 0.0; 
    
    
        if (screenX < midX) 
        { 
          dptScreen.SetX((screenX / midX) - 1); 
          outX = (screenX / midX) - 1; 
        } 
        else if (screenX > midX) 
        { 
          dptScreen.SetX((screenX - midX) / midX); 
          outX = (screenX - midX) / midX; 
        } 
        else if (screenX == midX) 
          dptScreen.SetX(0.0); 
    
    
        if (screenY < midY) 
        { 
          dptScreen.SetY(1 - (screenY / midY)); 
          outY = 1 - (screenY / midY); 
        } 
        else if (screenY > midY) 
        { 
          dptScreen.SetY(((pnlGE.Height - screenY) / midY) - 1); 
          outY = ((pnlGE.Height - screenY) / midY) - 1; 
        } 
        else if (screenY == midY) 
        { 
          dptScreen.SetY(0.0); 
        } 
    
    
        lblOutMouseX.Text = outX.ToString(); 
        lblOutMouseY.Text = outY.ToString(); 
    
    
        return dptScreen; 
      } 
      catch (Exception ex) 
      { 
        Cursor.Current = Cursors.Default; 
        MessageBox.Show("Error in DetermineScreenCoordinates().\n" + 
          ex.Message, "GETest", MessageBoxButtons.OK, MessageBoxIcon.Error); 
        return dptScreen; 
      } 
    } // Fine classe CalcolaCoordinate
        */
    }

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    Alcune considerazioni:

    1) Quando si posta il codice lo si deve includere all'interno degli appositi tag CODE, in modo da renderlo leggibile e mantenerlo indentato

    2) C# e tutta la combriccola di linguaggio .NET hanno il loro bel forum dedicato.


    Sposto la discussione e aggiungo io i tag CODE (se il codice è indentato).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    la classe dpoint non è conosciuta all'esterno e quindi non puoi ritornarla da una dll esterna.. metti al suo posto un Object e poi fai il cast

    codice:
    public Object SCoordinates(double x, double y)
    {
             DPoint dptScreen = new DPoint(-2, -2);
             try
                ..... // ecc ecc
    
             return dptScreen;
    }
    
    e la chiami così:
    
    DPoint tmp = (DPoint)SCoordinates(primoDouble, secondoDouble);

  8. #8
    In C# non puoi mettere una procedura al di fuori di una classe!
    la classe dpoint non è conosciuta all'esterno
    Perché no? :master: È dichiarata come public...
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    da quello che ho capito la dll ha le funzioni e la classe è da un'altra parte.. ho capito male?

  10. #10
    Boh, da quanto ho capito io quello che ha postato è un file .cs che fa parte del progetto della dll.
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.