Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [C#] Utilizzare codice C++ per progetto Windows Form

    Vorrei imparare ad utilizzare del codice C++ in un progetto C# Windows Form. In pratica mi servirebbe un esempio che mi faccia capire come utilizzare dei metodi implementati in C++ in un progetto C#.
    Fracty - The Fractal Generator



    If you cannot choose a concise name that expresses what the method does, it is possible that your method is attempting to perform too many diverse tasks.

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,477

    Re: [C#] Utilizzare codice C++ per progetto Windows Form

    Originariamente inviato da GliderKite
    Vorrei imparare ad utilizzare del codice C++ in un progetto C# Windows Form. In pratica mi servirebbe un esempio che mi faccia capire come utilizzare dei metodi implementati in C++ in un progetto C#.
    Esempi di codice si possono trovare generalmente con una ricerca su Google.

    Inoltre, credo sia opportuno definire con molta precisione cosa si intende per utilizzare codice...
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Certo, speravo solo ci fosse qualcuno che avesse già utilizzato codice C++ in un progetto C#.

    Utilizzare codice? L'ho scritto, mi chiedevo come richiamare un metodo (una funzione) scritta in C++ per utilizzarla appunto nel progetto in C#.

    Faccio un esempio:

    Se ho un file .h dove ho dichiarato e definito (eventualmente in un altro file .cpp) l'implementazione di una classe:

    codice:
    class Foo
    {
         public:
    
              void f();      // La funzione che voglio richiamare nel progetto C#
    };

    Come devo fare? Ovviamente lo stesso discorso varrebbe senza l'utilizzo di un metodo di una classe, se avessi a disposizione ad esempio una funzione globale, etc...
    Fracty - The Fractal Generator



    If you cannot choose a concise name that expresses what the method does, it is possible that your method is attempting to perform too many diverse tasks.

  4. #4

  5. #5
    Originariamente inviato da gibra
    Ma non fai prima a cercare su Google?

    http://lmgtfy.com/?q=use+c%2B%2B+code+in+c%23



    Vedi che io ho cercato e letto su Google, ma avere più pareri è sempre meglio per cercare di capire non solo come si fanno le cose, ma qual'è la strada migliore per farla. Per questo ho deciso di aprire la discussione, ma se questa filosofia cosi vicina ai programmatori qui da cosi fastidio possiamo pure chiudere la discussione.
    Fracty - The Fractal Generator



    If you cannot choose a concise name that expresses what the method does, it is possible that your method is attempting to perform too many diverse tasks.

  6. #6
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    Bisogna creare delle classi Wrapper e inlotre devi conoscere un pò di "Marshalling" altrimenti la vedo dura.
    I got the remedy

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Un piccolo esempio:

    Il metodo in c++

    codice:
     __declspec(dllexport) void pcBuildProfiles(unsigned char * pImage,int iWidth, int iHeight,int iWidthStep, int iLaserOrientation,int threshold, float * fvCentroids,float * fvWeights,int iVectorDim)
      {
    
    // Codice.....
            
      }
    e l'utilizzo in C#

    codice:
    [DllImport("ProcessCore.dll")]
            public static unsafe extern void pcBuildProfiles(byte* pImage, int iWidth, int iHeight, int iWidthStep, int iLaserOrientation, int threshold, float* pfvCent, float* pfvWei, int iVectorDim);
    
    public void BuildProfiles(ref Bitmap srcImage, byte threshold)
            {
                unsafe
                {
                    BitmapData BD = srcImage.LockBits(new Rectangle(0, 0, srcImage.Width, srcImage.Height), ImageLockMode.ReadOnly, PixelFormat.Format8bppIndexed);
                        fixed (float* pfvCentroids = fvCentroids)
                    {
                        fixed (float* pfvWeights = fvWeights)
                        {
                           pcBuildProfiles((byte*)BD.Scan0, srcImage.Width, srcImage.Height, BD.Stride, iLaserOrientation, threshold, pfvCentroids, pfvWeights, iVectorDim);
                        }
                           
                        }
                    }
                    srcImage.UnlockBits(BD);
                }
            }

    Sbagliare è umano, perseverare è diabolico.

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.